欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

如何在Java中进行图片剪裁

来源: javaer 分享于  点击 41977 次 点评:123

如何在Java中进行图片剪裁


这是一篇入门级文章,高手请略过。

在这篇文章中我们将学习如何用 Java 对图像进行剪裁并将剪裁出来的部分单独保存到文件中。

我们将通过以下步骤来学习:

接下来我们开始编码部分。

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; 

说明:

现在我们编写包含 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();  

说明:

接下来是 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);  

说明:

下面我们定义用于处理鼠标事件的方法

Listing 3: 鼠标事件处理函数

  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.        

说明:

下面是 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. }} 

说明:

完整的代码

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

相关栏目:

用户点评