Java实现图片压缩代码,图片大小转换
来源:互联网 发布:寻龙诀 知乎 编辑:程序博客网 时间:2024/06/05 08:30
在很多项目中我们会把上传的图片做处理,比较图片上传过多对服务器的容量和带宽有很多的浪费,如果不是必须的高清图片,我们可以通过代码来做压缩。在我的项目中我们压缩图片的目的是让web页面打开的速度很快,并且节省空间。
下面先分享一下代码:
package org.util; import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.awt.image.CropImageFilter;import java.awt.image.FilteredImageSource;import java.awt.image.ImageFilter;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream; public class ImgTools { /** * 按照 宽高 比例压缩 * * @param img * @param width * @param height * @param out * @throws IOException */ public static void thumbnail_w_h(File img, int width, int height, OutputStream out) throws IOException { BufferedImage bi = ImageIO.read(img); double srcWidth = bi.getWidth(); // 源图宽度 double srcHeight = bi.getHeight(); // 源图高度 double scale = 1; if (width > 0) { scale = width / srcWidth; } if (height > 0) { scale = height / srcHeight; } if (width > 0 && height > 0) { scale = height / srcHeight < width / srcWidth ? height / srcHeight : width / srcWidth; } thumbnail(img, (int) (srcWidth * scale), (int) (srcHeight * scale), out); } /** * 按照固定宽高原图压缩 * * @param img * @param width * @param height * @param out * @throws IOException */ public static void thumbnail(File img, int width, int height, OutputStream out) throws IOException { BufferedImage BI = ImageIO.read(img); Image image = BI.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.setColor(Color.RED); g.drawImage(image, 0, 0, null); // 绘制处理后的图 g.dispose(); ImageIO.write(tag, "JPEG", out); } /** * 按照宽高裁剪 * * @param srcImageFile * @param destWidth * @param destHeight * @param out */ public static void cut_w_h(File srcImageFile, int destWidth, int destHeight, OutputStream out) { cut_w_h(srcImageFile, 0, 0, destWidth, destHeight, out); } public static void cut_w_h(File srcImageFile, int x, int y, int destWidth, int destHeight, OutputStream out) { try { Image img; ImageFilter cropFilter; // 读取源图像 BufferedImage bi = ImageIO.read(srcImageFile); int srcWidth = bi.getWidth(); // 源图宽度 int srcHeight = bi.getHeight(); // 源图高度 if (srcWidth >= destWidth && srcHeight >= destHeight) { Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT); cropFilter = new CropImageFilter(x, y, destWidth, destHeight); img = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(image.getSource(), cropFilter)); BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.drawImage(img, 0, 0, null); // 绘制截取后的图 g.dispose(); // 输出为文件 ImageIO.write(tag, "JPEG", out); } } catch (Exception e) { e.printStackTrace(); } }// #cut_w_h public static void main(String[] args) throws IOException { File img = new File("e:\\a\\a.jpg"); FileOutputStream fos = new FileOutputStream("e:\\a\\b.jpg"); // ImgTools.thumbnail(img, 100, 100, fos); // ImgTools.cut_w_h(img, 230, 200, fos); ImgTools.thumbnail_w_h(img, 100, 0, fos); } }
其实我们很多人喜欢在上传的时候就做了限制了,这样在上传时就节省了带宽,可是很多客户是不会做图片处理的,5M的大图直接就给你上传,限制了说我们做的不人性化。无奈之下只能在后台进行转换。
阅读全文
0 0
- Java实现图片压缩代码,图片大小转换
- JAVA图片压缩代码实现
- java代码实现图片压缩
- java 上传图片 并压缩图片大小
- java 上传图片 并压缩图片大小
- java代码实现对图片压缩大小
- ASP实现上传图片自动 压缩图片大小 留存待修改
- java后台图片大小压缩
- java 使用Thumbnailator 上传图片 并压缩图片大小
- android上传图片压缩图片大小
- iOS一行代码压缩图片大小
- iOS一行代码压缩图片大小
- iOS一行代码压缩图片大小
- Java实现图片压缩
- java实现图片压缩
- java实现图片压缩
- java实现图片压缩
- java实现图片压缩
- chap4 图像复原 part2
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 A. Visiting Peking University(模拟水题)
- 算法进阶之回溯算法
- sql必知必会(第四版) 学习笔记一
- DeepLearning tutorial(7)深度学习框架Keras的使用-进阶
- Java实现图片压缩代码,图片大小转换
- 数理逻辑--课程概述
- Unity3d中的射线检测方法
- sql必知必会(第四版) 学习笔记二 视图
- 杭电ACM1000
- checkbox父选中所有和取消所有
- Django如何把数据库里的html格式输出到前端
- 知名互联网公司系统架构图[第1期]
- 第二次开博