如何在 Java 中進行圖片剪裁
這是一篇入門級文章,高手請略過。
在這篇文章中我們將學習如何用 Java 對影象進行剪裁併將剪裁出來的部分單獨儲存到檔案中。
我們將通過以下步驟來學習:
- 輸入影象,指定要處理的影象路徑
- 允許使用者拖放要剪裁的部分
- 選擇後使用 Robot 類來確定剪裁部分的座標
- 剪裁所選影象並保持
接下來我們開始編碼部分。
Listing1: 引入的類
import java.awt.Graphics; import java.awt.Rectangle; import java.awt.Robot; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.JFrame;
說明:
- Graphics 類包含繪製矩形的方法
- 我們使用 Rectangle 類作為拖拉的矩形區域以作剪裁
- Robot 類用於捕獲螢幕截圖
- 使用滑鼠偵聽器來獲取滑鼠的拖拉時間
- Robot 類使用 BufferedImage 來做影象處理
- File 類用於開啟影象檔案
- ImageIO 類用於將影象寫到 png 或者 jpg 影象檔案中
- JFrame 用於顯示介面
現在我們編寫包含 main 方法的入口類
Listing2: 入口類
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(); }
說明:
- 編寫了一個名為 CropImage 的類
- 該類擴充套件了 JFrame 以實現 frame 的所有功能
- 實現了不同的滑鼠事件偵聽器以便知道使用者什麼時候開始拖動滑鼠指標
- drag_status 變數用於儲存滑鼠開始拖動時的座標
- 我們定義了 main 方法去呼叫一個 start 方法,這個方法將在下面定義
接下來是 start 方法
Listing 2
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); }
說明:
- 我們定義一個名為 ImagePanel 的類,使用要處理的影象作為引數
- 在 JFrame 中放置這個要顯示圖片的 ImagePanel,並開始偵聽滑鼠事件
下面我們定義用於處理滑鼠事件的方法
Listing 3: 滑鼠事件處理函式
@Override public void mouseClicked(MouseEvent arg0) { } @Override public void mouseEntered(MouseEvent arg0) { } @Override public void mouseExited(MouseEvent arg0) { } @Override public void mousePressed(MouseEvent arg0) { repaint(); c1=arg0.getX(); c2=arg0.getY(); } @Override public void mouseReleased(MouseEvent arg0) { repaint(); if(drag_status==1) { c3=arg0.getX(); c4=arg0.getY(); try { draggedScreen(); } catch(Exception e) { e.printStackTrace(); } } } @Override public void mouseDragged(MouseEvent arg0) { repaint(); drag_status=1; c3=arg0.getX(); c4=arg0.getY(); } @Override public void mouseMoved(MouseEvent arg0) { } public void paint(Graphics g) { super.paint(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); }
說明:
- 當滑鼠按下時儲存當前座標到 c1 和 c2
- 當滑鼠按下並開始拖動時將拖動狀態變數 drag_status 設定為 true
- 到滑鼠按鍵鬆開時表示影象剪裁區域已經選擇完畢,呼叫 draggedscreen 方法
- paint 方法用於拖動時候的矩形顯示,通過當前座標和初始記錄的座標來繪製矩形
下面是 draggedscreen 方法的程式碼
Listing 4: draggedScreen 方法
public void draggedScreen()throws Exception { int w = c1 - c3; int h = c2 - c4; w = w * -1; h = h * -1; 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("Cropped image saved successfully."); }}
說明:
- 首先計算影象的高度和寬度
- 使用 Robot 類來對剪裁的區域進行截圖並保持到另外一個檔案 screen1.jpg
完整的程式碼
Listing 5: ImagePanel.java
import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JPanel; class ImagePanel extends JPanel { private Image img; public ImagePanel(String img) { this(new ImageIcon(img).getImage()); } public ImagePanel(Image img) { this.img = img; Dimension size = new Dimension(img.getWidth(null), img.getHeight(null)); // Dimension size = new Dimension(10,10); setPreferredSize(size); setMinimumSize(size); setMaximumSize(size); setSize(size); setLayout(null); } public void paintComponent(Graphics g) { g.drawImage(img, 0, 0, null); } }
Listing 6:CropImage.java
import java.awt.Graphics; import java.awt.Rectangle; import java.awt.Robot; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.JFrame; 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); } public void draggedScreen()throws Exception { int w = c1 - c3; int h = c2 - c4; w = w * -1; h = h * -1; 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("Cropped image saved successfully."); } @Override public void mouseClicked(MouseEvent arg0) { } @Override public void mouseEntered(MouseEvent arg0) { } @Override public void mouseExited(MouseEvent arg0) { } @Override public void mousePressed(MouseEvent arg0) { repaint(); c1=arg0.getX(); c2=arg0.getY(); } @Override public void mouseReleased(MouseEvent arg0) { repaint(); if(drag_status==1) { c3=arg0.getX(); c4=arg0.getY(); try { draggedScreen(); } catch(Exception e) { e.printStackTrace(); } } } @Override public void mouseDragged(MouseEvent arg0) { repaint(); drag_status=1; c3=arg0.getX(); c4=arg0.getY(); } @Override public void mouseMoved(MouseEvent arg0) { } public void paint(Graphics g) { super.paint(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); } }
全文完!
英文原文:http://mrbool.com/how-to-crop-an-image-using-java/25272
相關文章
- Java圖片剪裁併儲存的程式碼實現Java
- Vue 圖片剪裁元件設計思考Vue元件
- 如何在 CSS 背景圖片中對 SVG 圖片進行著色 ,修改svg圖片顏色CSSSVG
- 小程式canvas居中剪裁繪製圖片Canvas
- 利用vue-cropper剪裁圖片並上傳Vue
- 4.10 如何在Java中進行排序開發Java排序
- 一個Vue圖片上傳剪裁壓縮元件Vue元件
- vue 上傳圖片進行壓縮圖片Vue
- vue 實現剪裁圖片並上傳伺服器Vue伺服器
- SQL Server中對圖片進行儲存和輸出SQLServer
- 手把手教會您如何在VideoProc影片剪裁,影片分割圖文IDE
- java有沒有函式,可是判斷檔案是不是2進位制型別,如圖片?Java函式型別
- 在CSS中對背景圖片進行設定相關屬性CSS
- 圖片文字識別工具怎樣進行批次識別圖片?
- html程式碼處理(如圖片、字型大小)HTML
- 如何在Django ORM中進行not查詢?DjangoORM
- 如何在 Java 中實現無向圖Java
- PS使用教程:如何在Photoshop中給灰色圖片上色?
- Java 獲取Excel中圖片所在的行、列座標位置JavaExcel
- 使用 Intervention/image 對 Laravel 專案中的圖片進行處理Laravel
- Android 中實現圖片平移、縮放、旋轉同步進行Android
- iOS開發 如何在Label中顯示圖片-圖文混排iOS
- 如何在Django中使用圖片Django
- canvas 繪製的圖片,進行上傳Canvas
- PowerPoint 教程「17」,如何在 PowerPoint 中編輯圖片?
- 對html進行截圖並儲存為本地圖片HTML地圖
- Node.js 對圖片進行裁切、縮放Node.js
- 利用python進行識別相似圖片(二)Python
- 如何在Python中對dicts列表進行排序Python排序
- 如何在Linux中進行檔案切割操作?Linux
- 如何在您的Dock中更突出地對Mac App圖示進行分組MacAPP
- 如何在Github提交圖片,做一個自己的圖片倉庫Github
- 利用 JS 進行圖片處理並生成對應粒子圖JS
- 如何給應用增加圖片編輯功能:剪裁、濾鏡、貼紙、排版、標籤
- Java Word中的文字、圖片替換功能Java
- Java 讀取PDF中的文字和圖片Java
- 獲取本地圖片或拍照,進行頭像圖片的上傳的工具類地圖
- ?【圖】用圖片告訴你Java中的位運算Java