调用CompressPictureUtils.compress(要压缩的图片路径,保存的图片路径)可以对图片进行压缩。

左边的原图,右边是压缩后的图片。

调用函数的方法:

 public static void main(String[] args) {CompressPictureUtils.compress("D:\\1.jpg", "D:\\0.jpg");}

可以设置压缩属性:

/*** 图片压缩最大宽1920像素*/public static final Integer PICTURE_COMPRESS_WIDTH_MAX = 1920;// 1920像素/*** 图片压缩最大高1920像素*/public static final Integer PICTURE_COMPRESS_HEIGHT_MAX = 1920;// 1920像素/*** 图片压缩最小容量64KB*/public static final Integer PICTURE_COMPRESS_MIN = 1 << 16;// 64KB/*** 图片压缩最大容量64MB*/public static final Integer PICTURE_COMPRESS_MAX = 1 << 26;// 64MB/*** 图片压缩最小容量差64KB*/public static final Integer PICTURE_COMPRESS_DIFFER_MIN = 1 << 16;// 64KB

工具类:(复制后可以直接使用)

package util;import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.file.Files;import javax.imageio.ImageIO;/*** 图片压缩算法* * @author ALI**/
public class CompressPictureUtils {public static void main(String[] args) {CompressPictureUtils.compress("D:\\1.jpg", "D:\\0.jpg");}/*** 图片压缩最大宽1920像素*/public static final Integer PICTURE_COMPRESS_WIDTH_MAX = 1920;// 1920像素/*** 图片压缩最大高1920像素*/public static final Integer PICTURE_COMPRESS_HEIGHT_MAX = 1920;// 1920像素/*** 图片压缩最小容量64KB*/public static final Integer PICTURE_COMPRESS_MIN = 1 << 16;// 64KB/*** 图片压缩最大容量64MB*/public static final Integer PICTURE_COMPRESS_MAX = 1 << 26;// 64MB/*** 图片压缩最小容量差64KB*/public static final Integer PICTURE_COMPRESS_DIFFER_MIN = 1 << 16;// 64KBpublic static void compress(String sourceImagePath, String destinationImagePath) {try {/* 过滤小于64kb和大于64mb的图片 */File sourceImageFile = new File(sourceImagePath);File destinationImageFile = new File(destinationImagePath);long sourceImageSize = sourceImageFile.length();if (sourceImageSize == 0) {throw new Exception("empty");}if (sourceImageSize < PICTURE_COMPRESS_MIN) {throw new Exception("small");}if (sourceImageSize > PICTURE_COMPRESS_MAX) {throw new Exception("large");}/* 设置图片大小 */BufferedImage inputImage = ImageIO.read(sourceImageFile);int sourceImageWidth = inputImage.getWidth();int sourceImageHeight = inputImage.getHeight();int destinationImageWidth = sourceImageWidth;int destinationImageHeight = sourceImageHeight;if (sourceImageWidth > PICTURE_COMPRESS_WIDTH_MAX || sourceImageHeight > PICTURE_COMPRESS_HEIGHT_MAX) {if (sourceImageWidth > sourceImageHeight) {destinationImageWidth = PICTURE_COMPRESS_WIDTH_MAX;destinationImageHeight = destinationImageWidth * sourceImageHeight / sourceImageWidth;} else {destinationImageHeight = PICTURE_COMPRESS_HEIGHT_MAX;destinationImageWidth = destinationImageHeight * sourceImageWidth / sourceImageHeight;}}/* 压缩图片 */Image image = inputImage.getScaledInstance(destinationImageWidth, destinationImageHeight,Image.SCALE_DEFAULT);BufferedImage outputImage = new BufferedImage(destinationImageWidth, destinationImageHeight,BufferedImage.TYPE_INT_RGB);Graphics graphics = outputImage.getGraphics();graphics.drawImage(image, 0, 0, null);graphics.dispose();ImageIO.write(outputImage, "jpg", destinationImageFile);/* 过滤比原图小8kb以下的的图片 */long destinationImageSize = destinationImageFile.length();if (destinationImageSize > (sourceImageSize - PICTURE_COMPRESS_DIFFER_MIN)) {throw new Exception("low");}} catch (Exception e) {try {String msg = e.getMessage();if (msg == "small" || msg == "low") {// 过小或压缩率过低,保存原图File sourceImageFile = new File(sourceImagePath);File destinationImageFile = new File(destinationImagePath);destinationImageFile.delete();Files.copy(sourceImageFile.toPath(), destinationImageFile.toPath());} else {// 空或过大或异常,保存空图File emptyfile = new File(destinationImagePath);emptyfile.delete();emptyfile.createNewFile();}} catch (Exception e1) {}}}
}

ImageIO的图片压缩算法相关推荐

  1. 简单的BMCP位图图片压缩算法

    此算法并不高深,各位专业人士可以飘过了Orz.并且如果各位知道一些图片格式与压缩算法的话,从中应该可以看到一些相似的"影子". PS:本人非专业人士,以下有说错的敬请各位谅解:) ...

  2. 深度学习为图片压缩算法赋能:节省55%带宽

    本文来自图鸭科技团队的投稿,他们用深度学习技术设计.优化图片压缩算法,在保证图像画质的情况下能节省55%带宽.本文将介绍实现方法及测试对比. 随着互联网的发展,人们对高清图片的需求也在不断增加,在保证 ...

  3. C#:实现大图片压缩算法(附完整源码)

    C#:实现大图片压缩算法 private void button3_Click(object sender, EventArgs e){using (OpenFileDialog ofd = new ...

  4. 高质量无损图片压缩算法

    高质量无损图片压缩算法 using System.Drawing; using System.Drawing.Imaging; using System.IO;namespace CompressIm ...

  5. 这可能是最接近微信朋友圈的图片压缩算法

    开源最前线(ID:OpenSourceTop) 猿妹 整编 综合自:https://github.com/Curzibn/Luban 目前做APP开发总绕不开图片元素,如今手机拍照分辨率都非常高,图片 ...

  6. C#:实现图片压缩算法​(附完整源码)

    C#:实现图片压缩算法 public static bool GetPicThumbnail(string sFile, string outPath, int flag){System.Drawin ...

  7. ImageIO 读取图片

    ImageIO提供了直接读取图片到内存的方式,同样,我们可以使用ImageReader读取文件到内存中进行使用:我们对两种方式进行介绍. ImageReader读取 // 创建随机访问文件对象 Ran ...

  8. java ImageIO.write图片上传变色及背景变黑解决

    java ImageIO.write图片上传变色及背景变黑解决 public void getImage(HttpServletRequest request, HttpServletResponse ...

  9. Luban(鲁班)——可能是最接近微信朋友圈的图片压缩算法

    Luban Luban(鲁班)--Android图片压缩工具,仿微信朋友圈压缩策略 项目描述 目前做app开发总绕不开图片这个元素.但是随着手机拍照分辨率的提升,图片的压缩成为一个很重要的问题.单纯对 ...

最新文章

  1. 在SpringBoot启动类上添加ComponentScan出现springbootapplication already applies given @ComponentScan
  2. 《2021人脸识别行业白皮书》发布 拥挤安防还有多少空间?
  3. webapi返回字符串,解决自动加双引号或下划线的问题
  4. ElementUI table的行高设置
  5. 移动磁盘显示由于IO设备错误,无法运行此项请求要怎样寻回资料
  6. 机器学习概念笔记(1)——混淆矩阵、Precision、Recall、F-score
  7. 非常好用的自助建站程序整站源码 内置几十种站
  8. 液压传动与气动技术【3】
  9. ArcGIS实验教程——实验三十:地图注记与标注(标注转注记)用法案例详解
  10. Android 快速索引(城市列表和联系人)
  11. WIN7 通知栏处喇叭上有个小红叉,提示未插入“未插入扬声器或耳机”的解决方法
  12. vue里面watch监听当前路由信息
  13. iphone数据线连不上Mac
  14. MAC visio的替代品Omnigraffle+激活许可证
  15. linux命令---top
  16. URP——着色器和材质——灯光着色器 Lit
  17. phpyun joblist标签动态参数使用方法
  18. 量化投资学习——无套利均衡定价理论(non-arbitrage pricing theory)
  19. 沃顿商学院自我管理课
  20. 小技巧:怎么开通注册个人邮箱?

热门文章

  1. 表单上下间隔怎么设置php,html中怎么设置每行文字的间隔
  2. 使用java求解根号2
  3. Unraid配置阿里云加速镜像安装荒野无灯qBittorrent镜像-原创
  4. C#+ItextSharp 查看pdf文件页面尺寸
  5. Kafka 精妙的高性能设计(上篇)
  6. android 调出键盘表情_android 表情,软键盘冲突解决方案(仿微博等SNS应用)
  7. Debian添加自启动的两种方式
  8. JavaScript网课一
  9. CSS 关于box-sizing: border-box
  10. CSS box-shadow 详解