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); } }
相關文章
- 使用Java實現在SQLserver中實現圖片的儲存JavaSQLServer
- 小程式–儲存圖片到相簿功能實現
- java+pgsql實現儲存圖片到資料庫,以及讀取資料庫儲存的圖片JavaSQL資料庫
- 深入解析微信小程式頁面中實現的儲存圖片(附程式碼)微信小程式
- iOS實現點選圖片放大&長按儲存圖片iOS
- 如何在 Java 中進行圖片剪裁Java
- vue 實現剪裁圖片並上傳伺服器Vue伺服器
- 小程式canvas居中剪裁繪製圖片Canvas
- 儲存圖片
- WebView實現長按儲存圖片 長按識別二維碼WebView
- Activiti 儲存圖片
- 將網頁儲存為圖片形式程式碼例項網頁
- ASP儲存遠端圖片檔案到原生程式碼
- 簡要說明jquery+jcrop實現的圖片裁剪儲存jQuery
- Java實現的簡單電話號碼儲存Java
- 【資料結構】二叉樹(順序儲存、鏈式儲存)的JAVA程式碼實現資料結構二叉樹Java
- PHP+七牛雲端儲存上傳圖片程式碼片段PHP
- JAVA實現圖片裁剪Java
- Vue 圖片剪裁元件設計思考Vue元件
- PHP 圖片的合併,微信小程式碼合併,文字合併PHP微信小程式
- 5行程式碼實現微信小程式圖片上傳與騰訊免費5G儲存空間的使用行程微信小程式
- asp.net儲存圖片ASP.NET
- 儲存圖片到SD卡SD卡
- Matlab GUI儲存圖片MatlabGUI
- es6實現的本地儲存程式碼例項
- canvas實現的圖片縮放程式碼例項Canvas
- css實現的圖片水平垂直居中程式碼CSS
- CSS實現的背景圖片替代顏色程式碼CSS
- Delphi儲存網頁中的圖片網頁
- 微信H5實現網頁長按儲存圖片及識別二維碼H5網頁
- js實現canvas儲存圖片為png格式並下載到本地JSCanvas
- [Java實現] 圖片擇優(選擇最清楚的圖片)Java
- 短視訊直播系統,動態內的圖片實現長按儲存
- js實現的將網頁儲存為圖片簡單解釋介紹JS網頁
- 將HTML5 Canvas的內容儲存為圖片藉助toDataURL實現HTMLCanvas
- FFmpeg程式碼實現視訊轉jpg圖片
- css實現圖片灰度效果程式碼例項CSS
- 教你如何儲存抖音店鋪的商品圖片,自動儲存主圖、詳情圖