java 图片像素质量压缩与图片长宽缩放
2016-01-16 13:37
656 查看
今天找到的这个方法比以前项目用到的方法更好,这里记录下,方便日后使用!
/** * 缩放图片(压缩图片质量,改变图片尺寸) * 若原图宽度小于新宽度,则宽度不变! * @param newWidth 新的宽度 * @param quality 图片质量参数 0.7f 相当于70%质量 * 2015年12月11日 */ public static void resize(File originalFile, File resizedFile, int newWidth, float quality) throws IOException { if (quality > 1) { throw new IllegalArgumentException( "Quality has to be between 0 and 1"); } ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath()); Image i = ii.getImage(); Image resizedImage = null; int iWidth = i.getWidth(null); int iHeight = i.getHeight(null); if(iWidth < newWidth){ newWidth = iWidth; } if (iWidth > iHeight) { resizedImage = i.getScaledInstance(newWidth, (newWidth * iHeight) / iWidth, Image.SCALE_SMOOTH); } else { resizedImage = i.getScaledInstance((newWidth * iWidth) / iHeight, newWidth, Image.SCALE_SMOOTH); } // This code ensures that all the pixels in the image are loaded. Image temp = new ImageIcon(resizedImage).getImage(); // Create the buffered image. BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null), temp.getHeight(null), BufferedImage.TYPE_INT_RGB); // Copy image to buffered image. Graphics g = bufferedImage.createGraphics(); // Clear background and paint the image. g.setColor(Color.white); g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null)); g.drawImage(temp, 0, 0, null); g.dispose(); // Soften. float softenFactor = 0.05f; float[] softenArray = { 0, softenFactor, 0, softenFactor, 1 - (softenFactor * 4), softenFactor, 0, softenFactor, 0 }; Kernel kernel = new Kernel(3, 3, softenArray); ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); bufferedImage = cOp.filter(bufferedImage, null); // Write the jpeg to a file. FileOutputStream out = new FileOutputStream(resizedFile); // Encodes image as a JPEG data stream JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param = encoder .getDefaultJPEGEncodeParam(bufferedImage); param.setQuality(quality, true); encoder.setJPEGEncodeParam(param); encoder.encode(bufferedImage); } // Example usage public static void main(String[] args) throws IOException { // File originalImage = new File("C:\\11.jpg"); // resize(originalImage, new File("c:\\11-0.jpg"),150, 0.7f); // resize(originalImage, new File("c:\\11-1.jpg"),150, 1f); File originalImage = new File("d:\\testImg\\1.jpg"); System.out.println("源文件大小" + originalImage.length()); // File resizedImg = new File("d:\\testImg\\11.jpg"); // resize(originalImage, resizedImg, 850, 1f); // System.out.println("0.5转换后文件大小" + resizedImg.length()); // File resizedImg1 = new File("d:\\testImg\\111.jpg"); File resizedImg1 = new File("/alidata/zkyj/dashixiong/tempImgFile/11.jpg"); resize(originalImage, resizedImg1, 1550, 0.7f); System.out.println("0.7转换后文件大小" + resizedImg1.length()); }
相关文章推荐
- JAVA文件压缩、解压
- Maven导入eclipse缺少web-resources目录
- 【Java】判断字符串是否为数字的方法
- java组装json和提取一个json的例子
- Java设计模式——适配器设计模式
- Java线程未捕获异常处理
- 深入理解java异常处理机制
- struts2 使用ajax 传递json数据
- cmd运行java 找不到或无法加载主类的问题
- Java实现通过smtp服务器验证邮箱的真实有效性
- Struts2_ValueStack,OGNL详解
- 2、Java基础
- Spring下载方法
- JAVA文件监听
- 1、Java综述
- Struts2中的ModelDriven机制及其运用
- Java实现将选择题题库按照字母顺序重新排列
- SpringMVC返回文件流
- java中动态代理实现机制
- Struts2源码浅析-ConfigurationProvider