java指定宽度等比例压缩图片
来源:互联网 发布:软件测试面试经验 编辑:程序博客网 时间:2024/04/28 01:54
最近做项目需要用到图片压缩技术,在这里整理下做个分享。
需要注意的是如果要压缩的图片太大,就需要修改JDK的默认内存了。废话不多说,直接上代码。
import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import java.awt.image.BufferedImage;import java.awt.image.ConvolveOp;import java.awt.image.Kernel;import java.io.File;import java.io.FileOutputStream;import java.io.IOException; import javax.swing.ImageIcon; import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * * 图片压缩工具类 * @author 李锋镝 * */public class ImageUtil { /** * * @param originalFile 原文件 * @param resizedFile 压缩目标文件 * @param newWidth 压缩后的图片宽度 * @param quality 压缩质量(0到1之间,越高质量越好) * @throws IOException */ 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); System.out.println("iWidth:"+iWidth); int iHeight = i.getHeight(null); System.out.println("iHeight:"+iHeight); if (iWidth > iHeight) { resizedImage = i.getScaledInstance(newWidth, (newWidth * iHeight) / iWidth, Image.SCALE_SMOOTH); } else { resizedImage = i.getScaledInstance((newWidth * iWidth) / iHeight, newWidth, Image.SCALE_SMOOTH); } // 获取图片中的所有像素 Image temp = new ImageIcon(resizedImage).getImage(); // 创建缓冲 BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null), temp.getHeight(null), BufferedImage.TYPE_INT_RGB); // 复制图片到缓冲流中 Graphics g = bufferedImage.createGraphics(); // 清除背景并开始画图 g.setColor(Color.white); g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null)); g.drawImage(temp, 0, 0, null); g.dispose(); // 柔和图片. 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); FileOutputStream out = new FileOutputStream(resizedFile); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param = encoder .getDefaultJPEGEncodeParam(bufferedImage); param.setQuality(quality, true); encoder.setJPEGEncodeParam(param); encoder.encode(bufferedImage); bufferedImage.flush(); out.close(); } //测试 public static void main(String[] args) throws IOException { File originalImage = new File("H:\\000.jpg"); resize(originalImage, new File("H:\\1207-0.jpg"),500, 0.7f); resize(originalImage, new File("H:\\1207-1.jpg"),500, 1f); } }
最后,大家要注意一定要关闭文件输出流。
原文地址:java指定宽度等比例压缩图片
个人博客地址:李锋镝的个人博客
1 0
- java指定宽度等比例压缩图片
- java等比例压缩图片
- 等比例压缩图片
- 图片等比例压缩
- 图片等比例压缩
- Java压缩图片util,可等比例宽高不失真压缩,也可直接指定压缩后的宽高
- Java压缩图片util,可等比例宽高不失真压缩,也可直接指定压缩后的宽高
- Java压缩图片util,可等比例宽高不失真压缩,也可直接指定压缩后的宽高
- Java压缩图片util,可等比例宽高不失真压缩,也可直接指定压缩后的宽高
- js图片等比例压缩
- 图片等比例压缩方法
- iOS等比例压缩图片
- php图片等比例压缩
- 上传 图片 等比例压缩
- php等比例压缩图片
- 上传等比例压缩图片
- python图片等比例压缩
- 根据屏幕宽度,等比例缩放图片
- 数值游戏(360 2016实习生招聘笔试题)
- JNI/NDK开发指南(二)——JVM查找java native方法的规则
- ElasticSearch详解与优化设计
- Android的Fragment中onActivityResult不被调用的解决方案(绝对管用)
- mysql 实现 generate_series()
- java指定宽度等比例压缩图片
- redis配置文件redis.conf详细说明
- 为什么玩家会流失:如何理解次日留存率
- android studio 插件之 GsonFormat
- COM组件VC6.0调试方法
- Java中的String、StringBuffer和StringBuilder区别
- stl list自定义排序准则
- redis教程
- ubuntu安装PHP5.6