這篇文章主要介紹了Java怎么實現(xiàn)一個圖片剪裁功能的相關知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java怎么實現(xiàn)一個圖片剪裁功能文章都會有所收獲,下面我們一起來看看吧。
創(chuàng)新互聯(lián)公司網(wǎng)站建設提供從項目策劃、軟件開發(fā),軟件安全維護、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評估等整套的建站服務,主營業(yè)務為成都網(wǎng)站建設、成都做網(wǎng)站,重慶APP開發(fā)公司以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。創(chuàng)新互聯(lián)公司深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
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 類作為拖拉的矩形區(qū)域以作剪裁
Robot 類用于捕獲屏幕截圖
使用鼠標偵聽器來獲取鼠標的拖拉時間
Robot 類使用 BufferedImage 來做圖像處理
File 類用于打開圖像文件
ImageIO 類用于將圖像寫到 png 或者 jpg 圖像文件中
JFrame 用于顯示界面
現(xiàn)在我們編寫包含 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 以實現(xiàn) frame 的所有功能
實現(xiàn)了不同的鼠標事件偵聽器以便知道用戶什么時候開始拖動鼠標指針
drag_status 變量用于保存鼠標開始拖動時的坐標
我們定義了 main 方法去調(diào)用一個 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 的類,使用要處理的圖像作為參數(shù)
在 JFrame 中放置這個要顯示圖片的 ImagePanel,并開始偵聽鼠標事件
下面我們定義用于處理鼠標事件的方法
Listing 3:鼠標事件處理函數(shù)
@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
當鼠標按下并開始拖動時將拖動狀態(tài)變量 drag_status 設置為 true
到鼠標按鍵松開時表示圖像剪裁區(qū)域已經(jīng)選擇完畢,調(diào)用 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 類來對剪裁的區(qū)域進行截圖并保持到另外一個文件 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怎么實現(xiàn)一個圖片剪裁功能”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Java怎么實現(xiàn)一個圖片剪裁功能”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站欄目:Java怎么實現(xiàn)一個圖片剪裁功能
網(wǎng)站路徑:http://bm7419.com/article42/jdjdhc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、品牌網(wǎng)站建設、網(wǎng)站導航、網(wǎng)站設計、建站公司、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)