java图片文件处理工具类【包括图片缩放,剪切等功能】
2013-07-08 17:03
621 查看
java图片文件处理工具类【包括图片缩放,剪切等功能】
package com.taocz.youngth.util; import java.awt.Graphics; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.HeadlessException; import java.awt.Image; import java.awt.Rectangle; import java.awt.Transparency; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.Random; import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; import javax.swing.ImageIcon; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * @作者 王建明 * @创建日期 2012-6-16 * @创建时间 下午02:35:31 * @版本号 V 1.0 */ public class IconCompressUtil { public String path = ""; public IconCompressUtil(String path) { this.path = path; } public void change(int size) { compressImg(new File(path), size, null); } /** * @param oldfile * @param size * @param newfile * @return * @作者 王建明 * @创建日期 2012-6-16 * @创建时间 下午03:30:48 * @描述 —— 将oldfile的图片文件等比例压缩为size的newfile文件 */ public static File compressImg(File oldfile, int size, File newfile) { if(!newfile.exists()) try { newfile.createNewFile(); } catch (IOException e1) { // TODO Auto-generated catch block //e1.printStackTrace(); System.out.println("无法创建文件!!!"); return null; } BufferedImage bi; try { System.out.println("正在压缩:" + oldfile.getName()); bi = ImageIO.read(new FileInputStream(oldfile)); int width = bi.getWidth(); int height = bi.getHeight(); if (width > size || height > size) { Image image; if (width > height) { height = (int) (bi.getHeight() / (bi.getWidth() * 1d) * size); image = bi.getScaledInstance(size, height, Image.SCALE_DEFAULT); } else { width = (int) (bi.getWidth() / (bi.getHeight() * 1d) * size); image = bi.getScaledInstance(width, size, Image.SCALE_DEFAULT); } ImageIO.write(toBufferedImage(image), "png", new FileOutputStream(newfile)); System.out.println("压缩完成:" + newfile.getName()); return newfile; } else { System.out.println("无须压缩:" + oldfile.getName()); return oldfile; } } catch (Exception e) { e.printStackTrace(); } return null; } public static BufferedImage toBufferedImage(Image image) { if (image instanceof BufferedImage) { return (BufferedImage) image; } image = new ImageIcon(image).getImage(); BufferedImage bimage = null; GraphicsEnvironment ge = GraphicsEnvironment .getLocalGraphicsEnvironment(); try { int transparency = Transparency.TRANSLUCENT; GraphicsDevice gs = ge.getDefaultScreenDevice(); GraphicsConfiguration gc = gs.getDefaultConfiguration(); bimage = gc.createCompatibleImage(image.getWidth(null), image .getHeight(null), transparency); } catch (HeadlessException e) { } if (bimage == null) { int type = BufferedImage.TYPE_INT_RGB; bimage = new BufferedImage(image.getWidth(null), image .getHeight(null), type); } Graphics g = bimage.createGraphics(); g.drawImage(image, 0, 0, null); g.dispose(); return bimage; } /** * @return * @作者 王建明 * @创建日期 2012-8-2 * @创建时间 下午02:00:41 * @描述 —— 生成随机名字,不可能重复(用于文件的命名) */ public static String getRandomName() { Random r = new Random(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmssSSS"); StringBuffer sb = new StringBuffer(); sb.append(r.nextInt(100)); sb.append(r.nextInt(100)); sb.append("_"); sb.append(sdf.format(new Date())); sb.append("_"); sb.append(r.nextInt(100)); sb.append(r.nextInt(100)); return sb.toString(); } /** * @param inputFile源文件 * @param outFile生成文件 * @param width指定宽度 * @param height指定高度 * @param proportion是否等比例操作 * @return * @作者 王建明 * @创建日期 2012-8-2 * @创建时间 下午02:02:38 * @描述 —— 是否等比例缩放图片 */ public static boolean compressPic(String inputFile, String outFile, int width, int height, boolean proportion) { try { // 获得源文件 File file = new File(inputFile); if (!file.exists()) { return false; } Image img = ImageIO.read(file); // 判断图片格式是否正确 if (img.getWidth(null) == -1) { return false; } else { int newWidth; int newHeight; // 判断是否是等比缩放 if (proportion == true) { // 为等比缩放计算输出的图片宽度及高度 double rate1 = ((double) img.getWidth(null)) / (double) width + 0.1; double rate2 = ((double) img.getHeight(null)) / (double) height + 0.1; // 根据缩放比率大的进行缩放控制 double rate = rate1 > rate2 ? rate1 : rate2; newWidth = (int) (((double) img.getWidth(null)) / rate); newHeight = (int) (((double) img.getHeight(null)) / rate); } else { newWidth = width; // 输出的图片宽度 newHeight = height; // 输出的图片高度 } // 如果图片小于目标图片的宽和高则不进行转换 /* * if (img.getWidth(null) < width && img.getHeight(null) < * height) { newWidth = img.getWidth(null); newHeight = * img.getHeight(null); } */ BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB); // Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的,优先级比速度高 生成的图片质量比较好 但速度慢 tag.getGraphics().drawImage( img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null); FileOutputStream out = new FileOutputStream(outFile); // JPEGImageEncoder可适用于其他图片类型的转换 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(tag); out.close(); } } catch (IOException ex) { ex.printStackTrace(); } return true; } /** * @param srcFile源文件 * @param outFile输出文件 * @param x坐标 * @param y坐标 * @param width宽度 * @param height高度 * @return * @作者 王建明 * @创建日期 2012-8-2 * @创建时间 下午02:05:03 * @描述 —— 裁剪图片 */ public static boolean cutPic(String srcFile, String outFile, int x, int y, int width, int height) { FileInputStream is = null; ImageInputStream iis = null; try { // 如果源图片不存在 if (!new File(srcFile).exists()) { return false; } // 读取图片文件 is = new FileInputStream(srcFile); // 获取文件格式 String ext = srcFile.substring(srcFile.lastIndexOf(".") + 1); // ImageReader声称能够解码指定格式 Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(ext); ImageReader reader = it.next(); // 获取图片流 iis = ImageIO.createImageInputStream(is); // 输入源中的图像将只按顺序读取 reader.setInput(iis, true); // 描述如何对流进行解码 ImageReadParam param = reader.getDefaultReadParam(); // 图片裁剪区域 Rectangle rect = new Rectangle(x, y, width, height); // 提供一个 BufferedImage,将其用作解码像素数据的目标 param.setSourceRegion(rect); // 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象 BufferedImage bi = reader.read(0, param); // 保存新图片 File tempOutFile = new File(outFile); if (!tempOutFile.exists()) { tempOutFile.mkdirs(); } ImageIO.write(bi, ext, new File(outFile)); return true; } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (is != null) { is.close(); } if (iis != null) { iis.close(); } } catch (IOException e) { e.printStackTrace(); return false; } } } /** * @param doubleValue * @return * @作者 王建明 * @创建日期 2012-8-6 * @创建时间 下午05:24:15 * @描述 —— 将浮点型数据保留整数位转换成int型 */ public static Integer getRoundIntFromDouble(Double doubleValue) { return Integer.parseInt(String.valueOf(Math.round(doubleValue))); } }
相关文章推荐
- java图片文件处理工具类【包括图片缩放,剪切等功能】
- java实现静态图片剪切缩放功能【工具类】
- Java工具类——实现gif图片缩放与剪切功能
- Java工具类——实现gif图片缩放与剪切功能
- Java工具类——实现静态图片剪切缩放功能
- Java工具类——实现静态图片剪切缩放功能
- JAVA实现图片剪切缩放功能
- JAVA实现gif图片缩放与剪切功能
- 图片处理Java工具类(缩放,圆角,倒影)(未测试)
- Java 缩放图片工具类,创建缩略图、伸缩图片比例
- 【java】注册功能动态验证码的生成和验证(完整图片验证码封装工具类)
- C#实现的图片缩放与剪切功能
- 【工具类-java image filter】如何利用java缩放图片?
- java处理图片按比例缩放功能
- Java图片工具类完成图片的截取和任意缩放
- java缩放图片、java裁剪图片代码工具类
- java图片缩放剪切处理
- Java 缩放图片工具类,创建缩略图、伸缩图片比例
- 图片处理工具类: 功能:缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等
- 本图片处理类功能非常之强大可以实现几乎所有WEB开发中对图像的处理功能都集成了,包括有缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等功能