Java实现图片裁剪

时间:2022-08-20 09:00:28
Java代码  Java实现图片裁剪
  1. import java.awt.Rectangle;  
  2. import java.awt.image.BufferedImage;  
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.IOException;  
  6. import java.util.Iterator;  
  7.   
  8. import javax.imageio.ImageIO;  
  9. import javax.imageio.ImageReadParam;  
  10. import javax.imageio.ImageReader;  
  11. import javax.imageio.stream.ImageInputStream;  
  12.   
  13. public class OperateImage {  
  14.   
  15.     // ===源图片路径名称如:c:\1.jpg  
  16.     private String srcpath;  
  17.   
  18.     // ===剪切图片存放路径名称。如:c:\2.jpg  
  19.     private String subpath;  
  20.     public void setSrcpath(String srcpath) {  
  21.         this.srcpath = srcpath;  
  22.     }  
  23.     public void setSubpath(String subpath) {  
  24.         this.subpath = subpath;  
  25.     }  
  26.     // ===剪切点x坐标  
  27.     private int x;  
  28.   
  29.     private int y;  
  30.   
  31.     // ===剪切点宽度  
  32.     private int width;  
  33.     private int height;  
  34.   
  35.     public OperateImage() {  
  36.     }  
  37.   
  38.     public OperateImage(int x, int y, int width, int height) {  
  39.         this.x = x;  
  40.         this.y = y;  
  41.         this.width = width;  
  42.         this.height = height;  
  43.     }  
  44.  
  1. /** 
  2.      *  
  3.      * 对图片裁剪,并把裁剪完蛋新图片保存 。 
  4.      */  
  5.   
  6.     public void cut() throws IOException {  
  7.         FileInputStream is = null;  
  8.         ImageInputStream iis = null;  
  9.         try {  
  10.             // 读取图片文件  
  11.             is = new FileInputStream(srcpath);  
  12.   
  13.             /** 
  14.              *  
  15.              * 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader 
  16.              *  
  17.              * 声称能够解码指定格式。 参数:formatName - 包含非正式格式名称 . 
  18.              *  
  19.              * (例如 "jpeg" 或 "tiff")等 。 
  20.              */  
  21.             Iterator<ImageReader> it = ImageIO  
  22.                     .getImageReadersByFormatName("jpg");  
  23.   
  24.             ImageReader reader = it.next();  
  25.   
  26.             // 获取图片流  
  27.             iis = ImageIO.createImageInputStream(is);  
  28.   
  29.             /** 
  30.              *  
  31.              * <p> 
  32.              * iis:读取源。true:只向前搜索 
  33.              * </p> 
  34.              * .将它标记为 ‘只向前搜索’。 
  35.              *  
  36.              * 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader 
  37.              *  
  38.              * 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。 
  39.              */  
  40.             reader.setInput(iis, true);  
  41.   
  42.             /** 
  43.              *  
  44.              * <p> 
  45.              * 描述如何对流进行解码的类 
  46.              * <p> 
  47.              * .用于指定如何在输入时从 Java Image I/O
  1.  
  2.              * 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件 
  3.              *  
  4.              * 将从其 ImageReader 实现的 getDefaultReadParam 方法中返回 
  5.              *  
  6.              * ImageReadParam 的实例。 
  7.              */  
  8.             ImageReadParam param = reader.getDefaultReadParam();  
  9.   
  10.             /** 
  11.              *  
  12.              * 图片裁剪区域。Rectangle 指定了坐标空间中的一个区域,通过 Rectangle 对象 
  13.              *  
  14.              * 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。 
  15.              */  
  16.             Rectangle rect = new Rectangle(x, y, width, height);  
  17.   
  18.             // 提供一个 BufferedImage,将其用作解码像素数据的目标。  
  19.             param.setSourceRegion(rect);  
  20.   
  21.             /** 
  22.              *  
  23.              * 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将 
  24.              *  
  25.              * 它作为一个完整的 BufferedImage 返回。 
  26.              */  
  27.             BufferedImage bi = reader.read(0, param);  
  28.   
  29.             // 保存新图片  
  30.             ImageIO.write(bi, "jpg"new File(subpath));  
  31.         } finally {  
  32.             if (is != null)  
  33.                 is.close();  
  34.             if (iis != null)  
  35.                 iis.close();  
  36.         }  
  37.   
  38.     }  
  39.      
  1.  public static void main(String[] args) throws Exception {  
  2.         String name = "d:\\1.jpg";  
  3.         OperateImage o = new OperateImage(2020100100);  
  4.         o.setSrcpath(name);  
  5.         o.setSubpath("D:\\11.jpg");  
  6.         o.cut();  
  7.     }  
  8.   

原文:http://www.oschina.net/code/snippet_857368_14826