これは入門レベルの記事です。専門家は読み飛ばしてください。
この記事では、Java で画像を切り抜き、切り取った部分を個別にファイルに保存する方法を学びます。
次の手順で学習していきます。
1. 画像を入力し、処理する画像パスを指定します
2. ユーザーがトリミングする部分をドラッグ アンド ドロップできるようにします。
3. 選択後、Robot クラスを使用して切り取られた部分の座標を決定します。
4. 選択した画像を切り取って保存します
次にコーディング部分を開始します。
リスト1: 導入されたクラス
次のようにコードをコピーします。
java.awt.Graphicsをインポートします。
java.awt.Rectangle をインポートします。
java.awt.Robotをインポートします。
インポート java.awt.event.MouseEvent;
インポート java.awt.event.MouseListener;
インポート java.awt.event.MouseMotionListener;
インポート java.awt.image.BufferedImage;
java.io.ファイルをインポートします。
インポートjavax.imageio.ImageIO;
javax.swing.JFrameをインポートします。
例証します:
1. Graphics クラスには、四角形を描画するためのメソッドが含まれています
2. クリッピング用のドラッグされた長方形領域として Rectangle クラスを使用します。
3.ロボットクラスはスクリーンショットをキャプチャするために使用されます
4. マウスリスナーを使用してマウスのドラッグ時間を取得します
5. Robot クラスは画像処理に BufferedImage を使用します
6.Fileクラスは画像ファイルを開くために使用されます
7.ImageIO クラスは、png または jpg 画像ファイルに画像を書き込むために使用されます。
8.インターフェースの表示にはJFrameを使用します
次に、メインメソッドを含むエントリクラスを作成します。
リスト2: エントリークラス
次のようにコードをコピーします。
public class CropImage extends JFrame 実装 MouseListener、MouseMotionListener
{
int ドラッグ_ステータス=0,c1,c2,c3,c4;
public static void main(String args[])
{
新しい CropImage().start();
}
例証します:
1.CropImageという名前のクラスを作成しました
2. このクラスは JFrame を拡張して、フレームのすべての機能を実装します。
3. ユーザーがマウス ポインターのドラッグを開始したときを知るためのさまざまなマウス イベント リスナーを実装しました。
4.drag_status 変数は、マウスのドラッグ開始時の座標を保存するために使用されます。
5. start メソッドを呼び出す main メソッドを定義しました。これについては以下で定義します。
次に起動方法です
リスト 2
次のようにコードをコピーします。
public void start()
{
ImagePanel im=new ImagePanel("F://壁紙//壁紙//1.jpg");
追加(im);
setSize(400,400);
setVisible(true);
addMouseListener(this);
addMouseMotionListener( this );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
例証します:
1. 処理対象の画像をパラメータとして使用して、ImagePanel というクラスを定義します。
2. ImagePanel を配置して JFrame に画像を表示し、マウス イベントのリッスンを開始します。
次に、マウスイベントを処理するメソッドを定義します。
リスト 3: マウス イベント ハンドラー
次のようにコードをコピーします。
@オーバーライド
public void MouseClicked(MouseEvent arg0) {
}
@オーバーライド
public void MouseEntered(MouseEvent arg0) {
}
@オーバーライド
public void MouseExited(MouseEvent arg0) {
}
@オーバーライド
public void MousePressed(MouseEvent arg0) {
リペイント();
c1=arg0.getX();
c2=arg0.getY();
}
@オーバーライド
パブリック void マウスリリース(MouseEvent arg0) {
リペイント();
if(ドラッグステータス==1)
{
c3=arg0.getX();
c4=arg0.getY();
試す
{
ドラッグされた画面();
}
catch(例外 e)
{
e.printStackTrace();
}
}
}
@オーバーライド
public void MouseDragged(MouseEvent arg0) {
リペイント();
ドラッグステータス=1;
c3=arg0.getX();
c4=arg0.getY();
}
@オーバーライド
public void MouseMoved(MouseEvent arg0) {
}
パブリックボイドペイント(グラフィックスg)
{
スーパーペイント(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
if(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
例証します:
1. マウスを押すと、現在の座標を c1 と c2 に保存します。
2. マウスが押されてドラッグが開始されると、ドラッグステータス変数drag_statusをtrueに設定します。
3. マウス ボタンを放すと、画像のトリミング領域が選択されたことを意味し、draggedscreen メソッドが呼び出されます。
4. ペイント メソッドは、ドラッグ時に四角形を表示するために使用され、現在の座標と最初に記録された座標を使用して四角形を描画します。
以下は、draggedscreen メソッドのコードです。
リスト 4: draggedScreen メソッド
次のようにコードをコピーします。
public voidraggedScreen()throws 例外
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
ロボット robot = new Robot();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
ファイル保存パス=新しいファイル("画面1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("トリミングされた画像は正常に保存されました。");
}}
例証します:
1.まず画像の高さと幅を計算します
2. Robot クラスを使用して、トリミングされた領域のスクリーンショットを撮り、別のファイル screen1.jpg に保存します。
完全なコード
リスト 5: ImagePanel.java
次のようにコードをコピーします。
java.awt.Dimensionをインポートします。
java.awt.Graphicsをインポートします。
java.awt.Imageをインポートします。
インポート javax.swing.ImageIcon;
javax.swing.JPanelをインポートします。
class ImagePanel extends JPanel {
プライベート画像 img;
public ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}
public ImagePanel(画像画像) {
this.img = 画像;
寸法サイズ = 新しい Dimension(img.getWidth(null), img.getHeight(null));
// ディメンションのサイズ = new Dimension(10,10);
setPreferredSize(サイズ);
setMinimumSize(サイズ);
set最大サイズ(サイズ);
setSize(サイズ);
setLayout(null);
}
public voidPaintComponent(グラフィックス g) {
g.drawImage(img, 0, 0, null);
}
}
リスト 6:CropImage.java
次のようにコードをコピーします。
java.awt.Graphicsをインポートします。
java.awt.Rectangle をインポートします。
java.awt.Robotをインポートします。
インポート java.awt.event.MouseEvent;
インポート java.awt.event.MouseListener;
インポート java.awt.event.MouseMotionListener;
インポート java.awt.image.BufferedImage;
java.io.ファイルをインポートします。
インポートjavax.imageio.ImageIO;
javax.swing.JFrameをインポートします。
public class CropImage extends JFrame 実装 MouseListener、MouseMotionListener
{
int ドラッグ_ステータス=0,c1,c2,c3,c4;
public static void main(String args[])
{
新しい CropImage().start();
}
public void start()
{
ImagePanel im=new ImagePanel("F://壁紙//壁紙//1.jpg");
追加(im);
setSize(400,400);
setVisible(true);
addMouseListener(this);
addMouseMotionListener( this );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public voidraggedScreen()throws 例外
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
ロボット robot = new Robot();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
ファイル保存パス=新しいファイル("画面1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("トリミングされた画像は正常に保存されました。");
}
@オーバーライド
public void MouseClicked(MouseEvent arg0) {
}
@オーバーライド
public void MouseEntered(MouseEvent arg0) {
}
@オーバーライド
public void MouseExited(MouseEvent arg0) {
}
@オーバーライド
public void MousePressed(MouseEvent arg0) {
リペイント();
c1=arg0.getX();
c2=arg0.getY();
}
@オーバーライド
パブリック void マウスリリース(MouseEvent arg0) {
リペイント();
if(ドラッグステータス==1)
{
c3=arg0.getX();
c4=arg0.getY();
試す
{
ドラッグされた画面();
}
catch(例外 e)
{
e.printStackTrace();
}
}
}
@オーバーライド
public void MouseDragged(MouseEvent arg0) {
リペイント();
ドラッグステータス=1;
c3=arg0.getX();
c4=arg0.getY();
}
@オーバーライド
public void MouseMoved(MouseEvent arg0) {
}
パブリックボイドペイント(グラフィックスg)
{
スーパーペイント(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
if(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
}