Java中图片处理工具类,含等比缩放、图片裁剪



上传图片,对图片进行等比例缩放,及局部裁剪的工具类

[java]  view plain copy
  1. import java.awt.Container;  
  2. import java.awt.Graphics;  
  3. import java.awt.Graphics2D;  
  4. import java.awt.Image;  
  5. import java.awt.MediaTracker;  
  6. import java.awt.RenderingHints;  
  7. import java.awt.Toolkit;  
  8. import java.awt.image.BufferedImage;  
  9. import java.awt.image.CropImageFilter;  
  10. import java.awt.image.FilteredImageSource;  
  11. import java.awt.image.ImageFilter;  
  12. import java.io.BufferedInputStream;  
  13. import java.io.BufferedOutputStream;  
  14. import java.io.File;  
  15. import java.io.FileInputStream;  
  16. import java.io.FileOutputStream;  
  17. import java.io.IOException;  
  18. import java.io.InputStream;  
  19. import java.io.OutputStream;  
  20. import java.util.UUID;  
  21.   
  22. import javax.imageio.ImageIO;  
  23.   
  24. import com.sun.image.codec.jpeg.JPEGCodec;  
  25. import com.sun.image.codec.jpeg.JPEGEncodeParam;  
  26. import com.sun.image.codec.jpeg.JPEGImageEncoder;  
  27.   
  28. public class FileUploadUtils {  
  29.   
  30.     /** 
  31.      * 裁剪图片 
  32.      *  
  33.      * @param input 
  34.      * @param basepath 
  35.      * @param uid 
  36.      * @param x 
  37.      * @param y 
  38.      * @param width 
  39.      * @param height 
  40.      * @return 绝对路径 
  41.      * @throws IOException 
  42.      */  
  43.     public static String cutImg(String input, String basepath, int x, int y,  
  44.             int width, int height) throws IOException {  
  45.         String path2 = basepath + "/" + ConstantUtils.USERFACETEMPPATH;  
  46.         String postfix = getPostfix(input);  
  47.         String dst = path2 + "/" + UUID.randomUUID().toString() + "." + postfix;  
  48.   
  49.         createDir(path2);  
  50.         imgCut(basepath + input, dst, postfix, x, y, width, height);  
  51.   
  52.         return dst;  
  53.     }  
  54.   
  55.     /** 
  56.      * 裁剪图片 
  57.      *  
  58.      * @param input 
  59.      * @param src 
  60.      * @param x 
  61.      * @param y 
  62.      * @param width 
  63.      * @param height 
  64.      * @throws IOException 
  65.      */  
  66.     public static void imgCut(String input, String dst, String type, int x,  
  67.             int y, int width, int height) throws IOException {  
  68.         BufferedImage fromimg = ImageIO.read(new File(input));  
  69.         ImageFilter cropFilter = new CropImageFilter(x, y, width, height);  
  70.         Image img = Toolkit.getDefaultToolkit().createImage(  
  71.                 new FilteredImageSource(fromimg.getSource(), cropFilter));  
  72.         BufferedImage tag = new BufferedImage(width, height,  
  73.                 BufferedImage.TYPE_INT_RGB);  
  74.   
  75.         Graphics g = tag.getGraphics();  
  76.         g.drawImage(img, 00null); // 绘制小图  
  77.         g.dispose();  
  78.         // 输出为文件  
  79.         // dir = "d:\\temp\\cut_image_" + i + "_" + j + ".jpg";  
  80.         File f = new File(dst);  
  81.         ImageIO.write(tag, type, f);  
  82.   
  83.     }  
  84.   
  85.     /** 
  86.      * 上传头像文件 
  87.      *  
  88.      * @param src 
  89.      * @param basepath 
  90.      * @param filename 
  91.      * @return 
  92.      * @throws Exception 
  93.      */  
  94.     public static String uploadImg(File src, String basepath, String filename)  
  95.             throws Exception {  
  96.         String daypath = DateTools.getYear() + "" + DateTools.getMonth() + ""  
  97.                 + DateTools.getMonthWeek();  
  98.   
  99.         String temppath = ConstantUtils.BASEUPLOADPATH + "/"  
  100.                 + ConstantUtils.ORIGINALIMGPATH + "/" + daypath;  
  101.         String thumbnailpath = ConstantUtils.BASEUPLOADPATH + "/"  
  102.                 + ConstantUtils.THUMBNAILIMGPATH + "/" + daypath;  
  103.   
  104.         String postfix = getPostfix(filename);  
  105.         String uuid = UUID.randomUUID().toString();  
  106.         String dsttempname = uuid + "." + postfix;  
  107.   
  108.         createDir(basepath + "/" + temppath);  
  109.         createDir(basepath + "/" + thumbnailpath);  
  110.   
  111.         String dstallpath = basepath + "/" + temppath + "/" + dsttempname;  
  112.         String dstthumbnailpath = basepath + "/" + thumbnailpath + "/"  
  113.                 + dsttempname;  
  114.   
  115.         copy(src, new File(dstallpath));  
  116.   
  117.         // 对上传的文件进行 等比例 裁剪。 按照前段要展现的 height width  
  118.         Thumbnail(dstallpath, dstthumbnailpath, 350300100);  
  119.   
  120.         // 返回裁剪后的路径  
  121.   
  122.         return thumbnailpath + "/" + dsttempname;  
  123.     }  
  124.   
  125.     /** 
  126.      * 上传文件 
  127.      *  
  128.      * @param src 
  129.      * @param dst 
  130.      * @throws Exception 
  131.      */  
  132.     public static void copy(File src, File dst) throws Exception {  
  133.         try {  
  134.             InputStream in = null;  
  135.             OutputStream out = null;  
  136.             try {  
  137.                 in = new BufferedInputStream(new FileInputStream(src),  
  138.                         ConstantUtils.BUFFER_SIZE);  
  139.                 out = new BufferedOutputStream(new FileOutputStream(dst),  
  140.                         ConstantUtils.BUFFER_SIZE);  
  141.                 byte[] buffer = new byte[ConstantUtils.BUFFER_SIZE];  
  142.                 while (in.read(buffer) > 0) {  
  143.                     out.write(buffer);  
  144.                 }  
  145.             } finally {  
  146.                 if (null != in) {  
  147.                     in.close();  
  148.                 }  
  149.                 if (null != out) {  
  150.                     out.close();  
  151.                 }  
  152.             }  
  153.         } catch (Exception e) {  
  154.             e.printStackTrace();  
  155.             throw e;  
  156.         }  
  157.     }  
  158.   
  159.     /** 
  160.      * 得到文件后缀 jpg 
  161.      *  
  162.      * @param fileName 
  163.      * @return 
  164.      */  
  165.     public static String getPostfix(String fileName) {  
  166.         if (fileName.equals(""))  
  167.             return "";  
  168.         int pos = fileName.lastIndexOf(".");  
  169.         if (pos < 0) {  
  170.             return fileName.substring(fileName.length() - 3).toLowerCase();  
  171.         } else {  
  172.             return fileName.substring(pos + 1).toLowerCase();  
  173.         }  
  174.     }  
  175.   
  176.     /** 
  177.      * 创建目录 
  178.      *  
  179.      * @param filePath 
  180.      */  
  181.     public static void createDir(String filePath) {  
  182.         File myFile = new File(filePath);  
  183.         if (!myFile.exists()) {  
  184.             if (!myFile.mkdirs())  
  185.                 System.out.println("创建目录 fail");  
  186.             else  
  187.                 System.out.println("创建目录 success");  
  188.         }  
  189.         myFile = null;  
  190.     }  
  191.   
  192.     /** 
  193.      * 等比例缩放图片 
  194.      *  
  195.      * @param infile 
  196.      * @param outfile 
  197.      * @param width 
  198.      * @param height 
  199.      * @param quality 
  200.      * @throws IOException 
  201.      * @throws InterruptedException 
  202.      */  
  203.     public static void Thumbnail(String infile, String outfile, int width,  
  204.             int height, int quality) throws IOException, InterruptedException {  
  205.         // save thumbnail image to OUTFILE  
  206.         // System.out.println("infile:" + infile);  
  207.         BufferedImage thumbImage = null;  
  208.         BufferedOutputStream out = null;  
  209.         Image image = null;  
  210.         image = Toolkit.getDefaultToolkit().createImage(infile);  
  211.         MediaTracker mediaTracker = new MediaTracker(new Container());  
  212.         mediaTracker.addImage(image, 0);  
  213.         mediaTracker.waitForID(0);  
  214.         int thumbWidth = width;  
  215.         int thumbHeight = height;  
  216.         double thumbRatio = (double) thumbWidth / (double) thumbHeight;  
  217.         int imageWidth = image.getWidth(null);  
  218.         int imageHeight = image.getHeight(null);  
  219.         double imageRatio = (double) imageWidth / (double) imageHeight;  
  220.         if (thumbRatio < imageRatio) {  
  221.             thumbHeight = (int) (thumbWidth / imageRatio);  
  222.         } else {  
  223.             thumbWidth = (int) (thumbHeight * imageRatio);  
  224.         }  
  225.         thumbImage = new BufferedImage(thumbWidth, thumbHeight,  
  226.                 BufferedImage.TYPE_INT_RGB);  
  227.         Graphics2D graphics2D = thumbImage.createGraphics();  
  228.         graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,  
  229.                 RenderingHints.VALUE_INTERPOLATION_BILINEAR);  
  230.         graphics2D.drawImage(image, 00, thumbWidth, thumbHeight, null);  
  231.         out = new BufferedOutputStream(new FileOutputStream(outfile));  
  232.         JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
  233.         JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);  
  234.         quality = Math.max(0, Math.min(quality, 100));  
  235.         param.setQuality((float) quality / 100.0f, false);  
  236.         encoder.setJPEGEncodeParam(param);  
  237.         encoder.encode(thumbImage);  
  238.         out.close();  
  239.         thumbImage = null;  
  240.         out = null;  
  241.         image = null;  
  242.     }  
  243. }  

java图片裁剪处理工具类代码


剪切前: Java中图片处理工具类,含等比缩放、图片裁剪_第1张图片 

原文:java图片裁剪处理工具类代码

源代码下载地址:http://www.zuidaima.com/share/1550463351786496.htm

剪切后: 

[java]  view plain copy
  1. package com.zuidaima.zhangjun.image;  
  2.   
  3. import java.awt.Rectangle;  
  4. import java.awt.image.BufferedImage;  
  5. import java.io.File;  
  6. import java.io.FileInputStream;  
  7. import java.io.IOException;  
  8. import java.util.Iterator;  
  9. import javax.imageio.ImageIO;  
  10. import javax.imageio.ImageReadParam;  
  11. import javax.imageio.ImageReader;  
  12. import javax.imageio.stream.ImageInputStream;  
  13. /** 
  14. *@author www.zuidaima.com 
  15. **/  
  16. public class OperateImage {  
  17.     // ===源图片路径名称如:c:\1.jpg  
  18.     private String srcpath;  
  19.     // ===剪切图片存放路径名称。如:c:\2.jpg  
  20.     private String subpath;  
  21.     // ===剪切点x坐标  
  22.     private int x;  
  23.     private int y;  
  24.     // ===剪切点宽度  
  25.     private int width;  
  26.     private int height;  
  27.   
  28.     public OperateImage() {  
  29.     }  
  30.   
  31.     public OperateImage(int x, int y, int width, int height) {  
  32.         this.x = x;  
  33.         this.y = y;  
  34.         this.width = width;  
  35.         this.height = height;  
  36.     }  
  37.   
  38.     /** 
  39.      * 对图片裁剪,并把裁剪完的新图片保存 。 
  40.      */  
  41.     public void cut() throws IOException {  
  42.         FileInputStream is = null;  
  43.         ImageInputStream iis = null;  
  44.         try {  
  45.             // 读取图片文件  
  46.             is = new FileInputStream(srcpath);  
  47.             /** 
  48.              * 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader 
  49.              * 声称能够解码指定格式。 参数:formatName - 包含非正式格式名称 . 
  50.              * (例如 "jpeg" 或 "tiff")等 。 
  51.              */  
  52.             Iterator<ImageReader> it = ImageIO  
  53.                     .getImageReadersByFormatName("jpg");  
  54.             ImageReader reader = it.next();  
  55.             // 获取图片流  
  56.             iis = ImageIO.createImageInputStream(is);  
  57.             /** 
  58.              * iis:读取源。true:只向前搜索 
  59.              * 将它标记为 ‘只向前搜索’。 
  60.              * 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader 
  61.              * 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。 
  62.              */  
  63.             reader.setInput(iis, true);  
  64.             /** 
  65.              * <p> 
  66.              * 描述如何对流进行解码的类 
  67.              * <p> 
  68.              * 用于指定如何在输入时从 Java Image I/O 
  69.              * 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件 
  70.              * 将从其 ImageReader 实现的 getDefaultReadParam 方法中返回 
  71.              * ImageReadParam 的实例。 
  72.              */  
  73.             ImageReadParam param = reader.getDefaultReadParam();  
  74.             /** 
  75.              * 图片裁剪区域。Rectangle 指定了坐标空间中的一个区域,通过 Rectangle 对象 
  76.              * 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。 
  77.              */  
  78.             Rectangle rect = new Rectangle(x, y, width, height);  
  79.             // 提供一个 BufferedImage,将其用作解码像素数据的目标。  
  80.             param.setSourceRegion(rect);  
  81.             /** 
  82.              * 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将 
  83.              * 它作为一个完整的 BufferedImage 返回。 
  84.              */  
  85.             BufferedImage bi = reader.read(0, param);  
  86.             // 保存新图片  
  87.             ImageIO.write(bi, "jpg"new File(subpath));  
  88.         } finally {  
  89.             if (is != null)  
  90.                 is.close();  
  91.             if (iis != null)  
  92.                 iis.close();  
  93.         }  
  94.     }  
  95.   
  96.     public int getHeight() {  
  97.         return height;  
  98.     }  
  99.   
  100.     public void setHeight(int height) {  
  101.         this.height = height;  
  102.     }  
  103.   
  104.     public String getSrcpath() {  
  105.         return srcpath;  
  106.     }  
  107.   
  108.     public void setSrcpath(String srcpath) {  
  109.         this.srcpath = srcpath;  
  110.     }  
  111.   
  112.     public String getSubpath() {  
  113.         return subpath;  
  114.     }  
  115.   
  116.     public void setSubpath(String subpath) {  
  117.         this.subpath = subpath;  
  118.     }  
  119.   
  120.     public int getWidth() {  
  121.         return width;  
  122.     }  
  123.   
  124.     public void setWidth(int width) {  
  125.         this.width = width;  
  126.     }  
  127.   
  128.     public int getX() {  
  129.         return x;  
  130.     }  
  131.   
  132.     public void setX(int x) {  
  133.         this.x = x;  
  134.     }  
  135.   
  136.     public int getY() {  
  137.         return y;  
  138.     }  
  139.   
  140.     public void setY(int y) {  
  141.         this.y = y;  
  142.     }  
  143.   
  144.     public static void main(String[] args) throws Exception {  
  145.         String name = "D:\\zuidaima\\image.jpg";  
  146.         OperateImage o = new OperateImage(60580100);  
  147.         o.setSrcpath(name);  
  148.         o.setSubpath("F:\\zuidaima\\3.jpg");  
  149.         o.cut();  
  150.     }  
  151. }  

 




java图片文件处理工具类【包括图片缩放,剪切等功能】

[java]  view plain copy
  1. package com.taocz.youngth.util;  
  2.   
  3. import java.awt.Graphics;  
  4. import java.awt.GraphicsConfiguration;  
  5. import java.awt.GraphicsDevice;  
  6. import java.awt.GraphicsEnvironment;  
  7. import java.awt.HeadlessException;  
  8. import java.awt.Image;  
  9. import java.awt.Rectangle;  
  10. import java.awt.Transparency;  
  11. import java.awt.image.BufferedImage;  
  12. import java.io.File;  
  13. import java.io.FileInputStream;  
  14. import java.io.FileOutputStream;  
  15. import java.io.IOException;  
  16. import java.text.SimpleDateFormat;  
  17. import java.util.Date;  
  18. import java.util.Iterator;  
  19. import java.util.Random;  
  20.   
  21. import javax.imageio.ImageIO;  
  22. import javax.imageio.ImageReadParam;  
  23. import javax.imageio.ImageReader;  
  24. import javax.imageio.stream.ImageInputStream;  
  25. import javax.swing.ImageIcon;  
  26.   
  27. import com.sun.image.codec.jpeg.JPEGCodec;  
  28. import com.sun.image.codec.jpeg.JPEGImageEncoder;  
  29.   
  30. /** 
  31.  * @作者 王建明 
  32.  * @创建日期 2012-6-16 
  33.  * @创建时间 下午02:35:31 
  34.  * @版本号 V 1.0 
  35.  */  
  36. public class IconCompressUtil {  
  37.     public String path = "";  
  38.   
  39.     public IconCompressUtil(String path) {  
  40.         this.path = path;  
  41.     }  
  42.   
  43.     public void change(int size) {  
  44.         compressImg(new File(path), size, null);  
  45.     }  
  46.   
  47.     /** 
  48.      * @param oldfile 
  49.      * @param size 
  50.      * @param newfile 
  51.      * @return 
  52.      * @作者 王建明 
  53.      * @创建日期 2012-6-16 
  54.      * @创建时间 下午03:30:48 
  55.      * @描述 —— 将oldfile的图片文件等比例压缩为size的newfile文件 
  56.      */  
  57.     public static File compressImg(File oldfile, int size, File newfile) {  
  58.         if(!newfile.exists())  
  59.             try {  
  60.                 newfile.createNewFile();  
  61.             } catch (IOException e1) {  
  62.                 // TODO Auto-generated catch block  
  63.                 //e1.printStackTrace();  
  64.                 System.out.println("无法创建文件!!!");  
  65.                 return null;  
  66.             }  
  67.         BufferedImage bi;  
  68.         try {  
  69.             System.out.println("正在压缩:" + oldfile.getName());  
  70.             bi = ImageIO.read(new FileInputStream(oldfile));  
  71.             int width = bi.getWidth();  
  72.             int height = bi.getHeight();  
  73.             if (width > size || height > size) {  
  74.                 Image image;  
  75.                 if (width > height) {  
  76.                     height = (int) (bi.getHeight() / (bi.getWidth() * 1d) * size);  
  77.                     image = bi.getScaledInstance(size, height,  
  78.                             Image.SCALE_DEFAULT);  
  79.                 } else {  
  80.                     width = (int) (bi.getWidth() / (bi.getHeight() * 1d) * size);  
  81.                     image = bi.getScaledInstance(width, size,  
  82.                             Image.SCALE_DEFAULT);  
  83.                 }  
  84.                 ImageIO.write(toBufferedImage(image), "png",  
  85.                         new FileOutputStream(newfile));  
  86.                 System.out.println("压缩完成:" + newfile.getName());  
  87.                 return newfile;  
  88.             } else {  
  89.                 System.out.println("无须压缩:" + oldfile.getName());  
  90.                 return oldfile;  
  91.             }  
  92.         } catch (Exception e) {  
  93.             e.printStackTrace();  
  94.         }  
  95.         return null;  
  96.     }  
  97.   
  98.     public static BufferedImage toBufferedImage(Image image) {  
  99.         if (image instanceof BufferedImage) {  
  100.             return (BufferedImage) image;  
  101.         }  
  102.         image = new ImageIcon(image).getImage();  
  103.         BufferedImage bimage = null;  
  104.         GraphicsEnvironment ge = GraphicsEnvironment  
  105.                 .getLocalGraphicsEnvironment();  
  106.         try {  
  107.             int transparency = Transparency.TRANSLUCENT;  
  108.             GraphicsDevice gs = ge.getDefaultScreenDevice();  
  109.             GraphicsConfiguration gc = gs.getDefaultConfiguration();  
  110.             bimage = gc.createCompatibleImage(image.getWidth(null), image  
  111.                     .getHeight(null), transparency);  
  112.         } catch (HeadlessException e) {  
  113.         }  
  114.         if (bimage == null) {  
  115.             int type = BufferedImage.TYPE_INT_RGB;  
  116.             bimage = new BufferedImage(image.getWidth(null), image  
  117.                     .getHeight(null), type);  
  118.         }  
  119.         Graphics g = bimage.createGraphics();  
  120.         g.drawImage(image, 00null);  
  121.         g.dispose();  
  122.         return bimage;  
  123.     }  
  124.   
  125.     /** 
  126.      * @return 
  127.      * @作者 王建明 
  128.      * @创建日期 2012-8-2 
  129.      * @创建时间 下午02:00:41 
  130.      * @描述 —— 生成随机名字,不可能重复(用于文件的命名) 
  131.      */  
  132.     public static String getRandomName() {  
  133.         Random r = new Random();  
  134.         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmssSSS");  
  135.         StringBuffer sb = new StringBuffer();  
  136.         sb.append(r.nextInt(100));  
  137.         sb.append(r.nextInt(100));  
  138.         sb.append("_");  
  139.         sb.append(sdf.format(new Date()));  
  140.         sb.append("_");  
  141.         sb.append(r.nextInt(100));  
  142.         sb.append(r.nextInt(100));  
  143.         return sb.toString();  
  144.     }  
  145.   
  146.     /** 
  147.      * @param inputFile源文件 
  148.      * @param outFile生成文件 
  149.      * @param width指定宽度 
  150.      * @param height指定高度 
  151.      * @param proportion是否等比例操作 
  152.      * @return 
  153.      * @作者 王建明 
  154.      * @创建日期 2012-8-2 
  155.      * @创建时间 下午02:02:38 
  156.      * @描述 —— 是否等比例缩放图片 
  157.      */  
  158.     public static boolean compressPic(String inputFile, String outFile,  
  159.             int width, int height, boolean proportion) {  
  160.         try {  
  161.             // 获得源文件  
  162.             File file = new File(inputFile);  
  163.             if (!file.exists()) {  
  164.                 return false;  
  165.             }  
  166.             Image img = ImageIO.read(file);  
  167.             // 判断图片格式是否正确  
  168.             if (img.getWidth(null) == -1) {  
  169.                 return false;  
  170.             } else {  
  171.                 int newWidth;  
  172.                 int newHeight;  
  173.                 // 判断是否是等比缩放  
  174.                 if (proportion == true) {  
  175.                     // 为等比缩放计算输出的图片宽度及高度  
  176.                     double rate1 = ((double) img.getWidth(null))  
  177.                             / (double) width + 0.1;  
  178.                     double rate2 = ((double) img.getHeight(null))  
  179.                             / (double) height + 0.1;  
  180.                     // 根据缩放比率大的进行缩放控制  
  181.                     double rate = rate1 > rate2 ? rate1 : rate2;  
  182.                     newWidth = (int) (((double) img.getWidth(null)) / rate);  
  183.                     newHeight = (int) (((double) img.getHeight(null)) / rate);  
  184.                 } else {  
  185.                     newWidth = width; // 输出的图片宽度  
  186.                     newHeight = height; // 输出的图片高度  
  187.                 }  
  188.   
  189.                 // 如果图片小于目标图片的宽和高则不进行转换  
  190.                 /* 
  191.                  * if (img.getWidth(null) < width && img.getHeight(null) < 
  192.                  * height) { newWidth = img.getWidth(null); newHeight = 
  193.                  * img.getHeight(null); } 
  194.                  */  
  195.                 BufferedImage tag = new BufferedImage((int) newWidth,  
  196.                         (int) newHeight, BufferedImage.TYPE_INT_RGB);  
  197.   
  198.                 // Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的,优先级比速度高 生成的图片质量比较好 但速度慢  
  199.                 tag.getGraphics().drawImage(  
  200.                         img.getScaledInstance(newWidth, newHeight,  
  201.                                 Image.SCALE_SMOOTH), 00null);  
  202.                 FileOutputStream out = new FileOutputStream(outFile);  
  203.                 // JPEGImageEncoder可适用于其他图片类型的转换  
  204.                 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
  205.                 encoder.encode(tag);  
  206.                 out.close();  
  207.             }  
  208.         } catch (IOException ex) {  
  209.             ex.printStackTrace();  
  210.         }  
  211.         return true;  
  212.     }  
  213.   
  214.     /** 
  215.      * @param srcFile源文件 
  216.      * @param outFile输出文件 
  217.      * @param x坐标 
  218.      * @param y坐标 
  219.      * @param width宽度 
  220.      * @param height高度 
  221.      * @return 
  222.      * @作者 王建明 
  223.      * @创建日期 2012-8-2 
  224.      * @创建时间 下午02:05:03 
  225.      * @描述 —— 裁剪图片 
  226.      */  
  227.     public static boolean cutPic(String srcFile, String outFile, int x, int y,  
  228.             int width, int height) {  
  229.         FileInputStream is = null;  
  230.         ImageInputStream iis = null;  
  231.         try {  
  232.             // 如果源图片不存在  
  233.             if (!new File(srcFile).exists()) {  
  234.                 return false;  
  235.             }  
  236.   
  237.             // 读取图片文件  
  238.             is = new FileInputStream(srcFile);  
  239.   
  240.             // 获取文件格式  
  241.             String ext = srcFile.substring(srcFile.lastIndexOf(".") + 1);  
  242.   
  243.             // ImageReader声称能够解码指定格式  
  244.             Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(ext);  
  245.             ImageReader reader = it.next();  
  246.   
  247.             // 获取图片流  
  248.             iis = ImageIO.createImageInputStream(is);  
  249.   
  250.             // 输入源中的图像将只按顺序读取  
  251.             reader.setInput(iis, true);  
  252.   
  253.             // 描述如何对流进行解码  
  254.             ImageReadParam param = reader.getDefaultReadParam();  
  255.   
  256.             // 图片裁剪区域  
  257.             Rectangle rect = new Rectangle(x, y, width, height);  
  258.   
  259.             // 提供一个 BufferedImage,将其用作解码像素数据的目标  
  260.             param.setSourceRegion(rect);  
  261.   
  262.             // 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象  
  263.             BufferedImage bi = reader.read(0, param);  
  264.   
  265.             // 保存新图片  
  266.             File tempOutFile = new File(outFile);  
  267.             if (!tempOutFile.exists()) {  
  268.                 tempOutFile.mkdirs();  
  269.             }  
  270.             ImageIO.write(bi, ext, new File(outFile));  
  271.             return true;  
  272.         } catch (Exception e) {  
  273.             e.printStackTrace();  
  274.             return false;  
  275.         } finally {  
  276.             try {  
  277.                 if (is != null) {  
  278.                     is.close();  
  279.                 }  
  280.                 if (iis != null) {  
  281.                     iis.close();  
  282.                 }  
  283.             } catch (IOException e) {  
  284.                 e.printStackTrace();  
  285.                 return false;  
  286.             }  
  287.         }  
  288.     }  
  289.   
  290.     /** 
  291.      * @param doubleValue 
  292.      * @return 
  293.      * @作者 王建明 
  294.      * @创建日期 2012-8-6 
  295.      * @创建时间 下午05:24:15 
  296.      * @描述 —— 将浮点型数据保留整数位转换成int型 
  297.      */  
  298.     public static Integer getRoundIntFromDouble(Double doubleValue) {  
  299.         return Integer.parseInt(String.valueOf(Math.round(doubleValue)));  
  300.     }  
  301. }  

你可能感兴趣的:(图片处理)