成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在Java中進(jìn)行圖片剪裁

開發(fā) 后端
在這篇文章中我們將學(xué)習(xí)如何用 Java 對圖像進(jìn)行剪裁并將剪裁出來的部分單獨(dú)保存到文件中。接下來我們開始編碼部分。

這是一篇入門級文章,高手請略過。

在這篇文章中我們將學(xué)習(xí)如何用 Java 對圖像進(jìn)行剪裁并將剪裁出來的部分單獨(dú)保存到文件中。

我們將通過以下步驟來學(xué)習(xí):

  1. 輸入圖像,指定要處理的圖像路徑
  2. 允許用戶拖放要剪裁的部分
  3. 選擇后使用 Robot 類來確定剪裁部分的坐標(biāo)
  4. 剪裁所選圖像并保持

接下來我們開始編碼部分。

Listing1: 引入的類

  1. import java.awt.Graphics;  
  2. import java.awt.Rectangle;  
  3. import java.awt.Robot;  
  4. import java.awt.event.MouseEvent;  
  5. import java.awt.event.MouseListener;  
  6. import java.awt.event.MouseMotionListener;  
  7. import java.awt.image.BufferedImage;  
  8. import java.io.File;  
  9. import javax.imageio.ImageIO;  
  10. import javax.swing.JFrame; 

說明:

  1. Graphics 類包含繪制矩形的方法
  2. 我們使用 Rectangle 類作為拖拉的矩形區(qū)域以作剪裁
  3. Robot 類用于捕獲屏幕截圖
  4. 使用鼠標(biāo)偵聽器來獲取鼠標(biāo)的拖拉時間
  5. Robot 類使用 BufferedImage 來做圖像處理
  6. File 類用于打開圖像文件
  7. ImageIO 類用于將圖像寫到 png 或者 jpg 圖像文件中
  8. JFrame 用于顯示界面

現(xiàn)在我們編寫包含 main 方法的入口類

Listing2: 入口類

  1. public class CropImage extends JFrame implements MouseListener, MouseMotionListener  
  2. {  
  3.     int drag_status=0,c1,c2,c3,c4;  
  4. public static void main(String args[])  
  5. {  
  6.     new CropImage().start();  

說明:

  1. 編寫了一個名為 CropImage 的類
  2. 該類擴(kuò)展了 JFrame 以實現(xiàn) frame 的所有功能
  3. 實現(xiàn)了不同的鼠標(biāo)事件偵聽器以便知道用戶什么時候開始拖動鼠標(biāo)指針
  4. drag_status 變量用于保存鼠標(biāo)開始拖動時的坐標(biāo)
  5. 我們定義了 main 方法去調(diào)用一個 start 方法,這個方法將在下面定義

接下來是 start 方法

Listing 2

  1. public void start()  
  2. {  
  3.     ImagePanel im=new ImagePanel("F:\\Wallpaper\\wallpapers\\1.jpg");  
  4.     add(im);  
  5.     setSize(400,400);  
  6.     setVisible(true);  
  7.     addMouseListener(this);  
  8.     addMouseMotionListener( this );  
  9.     setDefaultCloseOperation(EXIT_ON_CLOSE);  

說明:

  1. 我們定義一個名為 ImagePanel 的類,使用要處理的圖像作為參數(shù)
  2. 在 JFrame 中放置這個要顯示圖片的 ImagePanel,并開始偵聽鼠標(biāo)事件

下面我們定義用于處理鼠標(biāo)事件的方法

Listing 3: 鼠標(biāo)事件處理函數(shù)

  1. @Override 
  2. public void mouseClicked(MouseEvent arg0) {  
  3. }  
  4.    
  5. @Override 
  6. public void mouseEntered(MouseEvent arg0) {  
  7. }  
  8.    
  9. @Override 
  10. public void mouseExited(MouseEvent arg0) {  
  11. }  
  12.    
  13. @Override 
  14. public void mousePressed(MouseEvent arg0) {  
  15.     repaint();  
  16.     c1=arg0.getX();  
  17.     c2=arg0.getY();  
  18. }  
  19.    
  20. @Override 
  21. public void mouseReleased(MouseEvent arg0) {  
  22.     repaint();  
  23.     if(drag_status==1)  
  24.     {  
  25.     c3=arg0.getX();  
  26.     c4=arg0.getY();  
  27.     try 
  28.     {  
  29.     draggedScreen();  
  30.     }  
  31.     catch(Exception e)  
  32.     {  
  33.         e.printStackTrace();  
  34.     }  
  35.     }  
  36. }  
  37.    
  38. @Override 
  39. public void mouseDragged(MouseEvent arg0) {  
  40.     repaint();  
  41.     drag_status=1;  
  42.     c3=arg0.getX();  
  43.     c4=arg0.getY();  
  44. }  
  45.  
  46. @Override 
  47. public void mouseMoved(MouseEvent arg0) {  
  48.        
  49. }  
  50.    
  51. public void paint(Graphics g)  
  52. {  
  53.     super.paint(g);  
  54.     int w = c1 - c3;  
  55.     int h = c2 - c4;  
  56.     w = w * -1;  
  57.     h = h * -1;  
  58.     if(w<0)  
  59.         w = w * -1;  
  60.     g.drawRect(c1, c2, w, h);  
  61.        

說明:

  1. 當(dāng)鼠標(biāo)按下時存儲當(dāng)前坐標(biāo)到 c1 和 c2
  2. 當(dāng)鼠標(biāo)按下并開始拖動時將拖動狀態(tài)變量 drag_status 設(shè)置為 true
  3. 到鼠標(biāo)按鍵松開時表示圖像剪裁區(qū)域已經(jīng)選擇完畢,調(diào)用 draggedscreen 方法
  4. paint 方法用于拖動時候的矩形顯示,通過當(dāng)前坐標(biāo)和初始記錄的坐標(biāo)來繪制矩形

下面是 draggedscreen 方法的代碼

Listing 4: draggedScreen 方法

  1. public void draggedScreen()throws Exception  
  2. {  
  3.         int w = c1 - c3;  
  4.         int h = c2 - c4;  
  5.         w = w * -1;  
  6.         h = h * -1;  
  7.         Robot robot = new Robot();  
  8.         BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));  
  9.         File save_path=new File("screen1.jpg");  
  10.         ImageIO.write(img, "JPG", save_path);  
  11.     System.out.println("Cropped image saved successfully.");  
  12. }} 

說明:

  1. 首先計算圖像的高度和寬度
  2. 使用 Robot 類來對剪裁的區(qū)域進(jìn)行截圖并保持到另外一個文件 screen1.jpg

完整的代碼

Listing 5: ImagePanel.java

  1. import java.awt.Dimension;  
  2. import java.awt.Graphics;  
  3. import java.awt.Image;  
  4.    
  5. import javax.swing.ImageIcon;  
  6. import javax.swing.JPanel;  
  7.    
  8.     class ImagePanel extends JPanel {  
  9.    
  10.           private Image img;  
  11.    
  12.           public ImagePanel(String img) {  
  13.             this(new ImageIcon(img).getImage());  
  14.           }  
  15.    
  16.           public ImagePanel(Image img) {  
  17.             this.img = img;  
  18.             Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));  
  19.            // Dimension size = new Dimension(10,10);  
  20.             setPreferredSize(size);  
  21.             setMinimumSize(size);  
  22.             setMaximumSize(size);  
  23.             setSize(size);  
  24.             setLayout(null);  
  25.           }  
  26.    
  27.           public void paintComponent(Graphics g) {  
  28.             g.drawImage(img, 00null);  
  29.           }  
  30.    
  31.         } 

Listing 6:CropImage.java

  1. import java.awt.Graphics;  
  2. import java.awt.Rectangle;  
  3. import java.awt.Robot;  
  4. import java.awt.event.MouseEvent;  
  5. import java.awt.event.MouseListener;  
  6. import java.awt.event.MouseMotionListener;  
  7. import java.awt.image.BufferedImage;  
  8. import java.io.File;  
  9. import javax.imageio.ImageIO;  
  10. import javax.swing.JFrame;  
  11.    
  12. public class CropImage extends JFrame implements MouseListener, MouseMotionListener  
  13. {  
  14.     int drag_status=0,c1,c2,c3,c4;  
  15. public static void main(String args[])  
  16. {  
  17.     new CropImage().start();  
  18. }  
  19. public void start()  
  20. {  
  21.     ImagePanel im=new ImagePanel("F:\\Wallpaper\\wallpapers\\1.jpg");  
  22.     add(im);  
  23.     setSize(400,400);  
  24.     setVisible(true);  
  25.     addMouseListener(this);  
  26.     addMouseMotionListener( this );  
  27.     setDefaultCloseOperation(EXIT_ON_CLOSE);  
  28. }  
  29. public void draggedScreen()throws Exception  
  30. {  
  31.         int w = c1 - c3;  
  32.         int h = c2 - c4;  
  33.         w = w * -1;  
  34.         h = h * -1;  
  35.         Robot robot = new Robot();  
  36.         BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));  
  37.         File save_path=new File("screen1.jpg");  
  38.         ImageIO.write(img, "JPG", save_path);  
  39.     System.out.println("Cropped image saved successfully.");  
  40. }  
  41. @Override 
  42. public void mouseClicked(MouseEvent arg0) {      
  43. }  
  44.    
  45. @Override 
  46. public void mouseEntered(MouseEvent arg0) {      
  47. }  
  48.    
  49. @Override 
  50. public void mouseExited(MouseEvent arg0) {       
  51. }  
  52.    
  53. @Override 
  54. public void mousePressed(MouseEvent arg0) {  
  55.     repaint();  
  56.     c1=arg0.getX();  
  57.     c2=arg0.getY();  
  58. }  
  59.    
  60. @Override 
  61. public void mouseReleased(MouseEvent arg0) {  
  62.     repaint();  
  63.     if(drag_status==1)  
  64.     {  
  65.     c3=arg0.getX();  
  66.     c4=arg0.getY();  
  67.     try 
  68.     {  
  69.     draggedScreen();  
  70.     }  
  71.     catch(Exception e)  
  72.     {  
  73.         e.printStackTrace();  
  74.     }  
  75.     }  
  76. }  
  77.    
  78. @Override 
  79. public void mouseDragged(MouseEvent arg0) {  
  80.     repaint();  
  81.     drag_status=1;  
  82.     c3=arg0.getX();  
  83.     c4=arg0.getY();  
  84. }  
  85.    
  86. @Override 
  87. public void mouseMoved(MouseEvent arg0) {  
  88.        
  89. }  
  90.    
  91. public void paint(Graphics g)  
  92. {  
  93.     super.paint(g);  
  94.     int w = c1 - c3;  
  95.     int h = c2 - c4;  
  96.     w = w * -1;  
  97.     h = h * -1;  
  98.     if(w<0)  
  99.         w = w * -1;  
  100.     g.drawRect(c1, c2, w, h);    
  101. }  

英文原文:http://mrbool.com/how-to-crop-an-image-using-java/25272

原文鏈接:http://www.oschina.net/question/12_63302

責(zé)任編輯:林師授 來源: OSCHINA
相關(guān)推薦

2010-01-05 13:47:43

Jquery Json

2017-10-16 08:07:22

2017-11-13 15:46:07

2011-08-01 18:52:26

ActiveDirecOU

2010-01-28 10:18:50

Visual StudXML編程

2025-02-10 10:29:32

2016-09-21 13:35:33

LinuxVimUbuntu

2012-09-19 21:59:57

IBM大型主機(jī)ELS數(shù)據(jù)整合

2023-05-26 15:46:23

數(shù)據(jù)結(jié)構(gòu)布隆過濾器開發(fā)

2024-02-07 09:36:40

MySQL數(shù)據(jù)

2017-04-07 09:00:46

UbuntuVim文本選擇

2020-06-30 08:23:00

JavaScript開發(fā)技術(shù)

2024-06-07 14:01:29

2018-12-03 14:15:36

SUSE 12 Lin單用戶模式命令

2009-06-22 10:29:11

集成測試Spring

2010-09-27 14:38:43

JVM內(nèi)存設(shè)置Eclipse

2011-08-01 10:41:59

Xcode 條件編譯

2018-05-29 09:33:55

Linux終端顯示圖片

2011-05-16 13:40:13

MySQL儲存圖片

2015-05-12 10:03:55

OpenStack環(huán)境容器編排Docker
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 午夜一级做a爰片久久毛片 精品综合 | 国产一区二区三区 | 一区二区三区亚洲视频 | 国产成人精品一区二区 | 国产午夜精品一区二区三区 | 国产一区二区三区四区在线观看 | 国产亚洲一区二区三区 | 久草视频观看 | 国产免费一级片 | 91精品麻豆日日躁夜夜躁 | 视频一二三区 | 精品一区二区三区在线视频 | 欧美二区在线 | 免费观看一级特黄欧美大片 | 日韩天堂av | 男女网站在线观看 | 91亚洲国产成人久久精品网站 | 免费观看的av毛片的网站 | 国产精品久久久久久久7电影 | 免费三级av| 欧美高清dvd | 国产精品特级毛片一区二区三区 | 色婷婷久久久亚洲一区二区三区 | 色99视频| 日韩手机在线看片 | 成人毛片一区二区三区 | 精品乱码一区二区 | 久久99精品久久久 | 久久精品亚洲国产奇米99 | 国产在线永久免费 | 日韩欧美在线一区二区 | 成人亚洲片 | 玖玖综合在线 | 成人免费看片 | 国产亚洲精品一区二区三区 | 久久99精品久久 | 国产偷录视频叫床高潮对白 | 国产色婷婷 | 在线一区二区三区 | 国产91亚洲精品一区二区三区 | caoporn国产|