首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 圖片裁剪與儲存完整實作教學

     編輯:Java 程式設計入門

前言

在 Java 桌面應用開發中,圖片裁剪是常見需求。本文將完整示範如何利用 Swing 元件與 Robot 類別,實現滑鼠拖曳選取區域並將裁剪結果儲存為圖檔的功能。

核心設計思路

  1. 載入指定路徑的圖片並顯示於 JFrame 視窗中
  2. 實作 MouseListener 與 MouseMotionListener 捕捉滑鼠拖曳事件
  3. 記錄拖曳起點與終點座標,即時繪製選取矩形框
  4. 釋放滑鼠時呼叫 Robot.createScreenCapture() 進行螢幕區域截圖
  5. 透過 ImageIO 將截圖儲存為 JPG 格式

關鍵類別說明

類別用途
Graphics繪製選取矩形框
Rectangle定義裁剪區域範圍
Robot執行螢幕截圖操作
BufferedImage記憶體中處理圖像資料
ImageIO圖檔讀寫(支援 PNG/JPG)
JFrame提供顯示視窗容器

核心程式碼架構

1. 進入點類別 CropImage

public class CropImage extends JFrame implements MouseListener, MouseMotionListener {
    int drag_status = 0, c1, c2, c3, c4;

    public static void main(String[] args) {
        new CropImage().start();
    }

    public void start() {
        ImagePanel im = new ImagePanel("F:\\Wallpaper\\wallpapers\\1.jpg");
        add(im);
        setSize(400, 400);
        setVisible(true);
        addMouseListener(this);
        addMouseMotionListener(this);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    // ... 滑鼠事件處理與 paint 方法
}

2. 滑鼠事件處理邏輯

  • mousePressed:記錄起始座標 (c1, c2)
  • mouseDragged:更新結束座標 (c3, c4),設定 drag_status=1,觸發重繪
  • mouseReleased:確認選取完成,呼叫 draggedScreen() 執行裁剪儲存
  • paint:根據座標計算寬高,繪製即時選取框

3. 裁剪儲存核心方法

public void draggedScreen() throws Exception {
    int w = Math.abs(c1 - c3);
    int h = Math.abs(c2 - c4);
    Robot robot = new Robot();
    BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2, w, h));
    File save_path = new File("screen1.jpg");
    ImageIO.write(img, "JPG", save_path);
    System.out.println("裁剪圖片儲存成功。");
}

4. 圖片顯示面板 ImagePanel

class ImagePanel extends JPanel {
    private Image img;

    public ImagePanel(String path) {
        this(new ImageIcon(path).getImage());
    }

    public ImagePanel(Image img) {
        this.img = img;
        Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
        setPreferredSize(size);
        setMinimumSize(size);
        setMaximumSize(size);
        setSize(size);
        setLayout(null);
    }

    @Override
    protected void paintComponent(Graphics g) {
        g.drawImage(img, 0, 0, null);
    }
}

完整程式碼整理

完整原始碼包含兩個檔案:ImagePanel.java 與 CropImage.java,已於上方分段展示。實際部署時請確認圖片路徑正確,並注意 Robot 類別需在具備圖形介面環境下執行。

常見問題與改進方向

  • 座標偏移:Robot 擷取的是螢幕絕對座標,若視窗有邊框或標題列,需扣除偏移量
  • 跨平台相容性:部分 Linux 桌面環境可能限制 Robot 權限
  • 功能擴充:可加入縮放、旋轉、多種輸出格式、拖曳移動選取框等進階功能

總結

本範例展示了 Java AWT/Swing 結合 Robot 類別實現互動式圖片裁剪的完整流程。掌握滑鼠事件處理、即時繪製與螢幕截圖三大核心技術,即可輕鬆建立客製化圖片編輯工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved