前言:

1、由于商户进件时,上游对图片大小有要求(500kb以下),而我们平台图片过大(10M以上),所以必须通过程序将图片压缩后再上传;

2、java api可以通过ImageIO实现图片压缩,但效果不好,图片压缩后出现变红现象,故舍弃;

3、测试谷歌Thumbnails插件后,觉得还不错,故选用该插件来实现;

4、谷歌插件固然好,能指定不同的参数进行压缩,例如:宽高(size)、缩放(scale)、旋转()、指定质量比(outputQuality),但不能指定图片占存大小进行压缩(如果可以,请留言告知我,感激不尽!),故自己实现了此功能;

代码功能:

1、指定源文件路径、目标文件路径、最大图片大小(单位kb)、递归压缩的比率(0-1之间,建议0.8),如果测试出现java OutOfMemoryError,大多是递归压缩比例设置有问题;

2、可以实现图片格式之间的互转,只需在源文件和目标文件路径指定即可;

3、通过测试可知,png转jpg图片占存大小变小,jgp转png图片占存大小变大;

引用的jar包:

thumbnailator-0.4.8.jar

代码如下:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;import javax.imageio.ImageIO;import net.coobird.thumbnailator.Thumbnails;import org.apache.commons.lang3.StringUtils;public class PicUtils {public static void main(String[] args) {PicUtils.commpressPicForScale("C:\\Users\\123\\Desktop\\1.png","C:\\Users\\123\\Desktop\\12.jpg", 500, 0.8); // 图片小于500kb}/*** 根据指定大小和指定精度压缩图片* * @param srcPath*            源图片地址* @param desPath*            目标图片地址* @param desFilesize*            指定图片大小,单位kb* @param accuracy*            精度,递归压缩的比率,建议小于0.9* @return*/public static String commpressPicForScale(String srcPath, String desPath,long desFileSize, double accuracy) {if (StringUtils.isEmpty(srcPath) || StringUtils.isEmpty(srcPath)) {return null;}if (!new File(srcPath).exists()) {return null;}try {File srcFile = new File(srcPath);long srcFileSize = srcFile.length();System.out.println("源图片:" + srcPath + ",大小:" + srcFileSize / 1024+ "kb");// 1、先转换成jpgThumbnails.of(srcPath).scale(1f).toFile(desPath);// 递归压缩,直到目标文件大小小于desFileSizecommpressPicCycle(desPath, desFileSize, accuracy);File desFile = new File(desPath);System.out.println("目标图片:" + desPath + ",大小" + desFile.length()/ 1024 + "kb");System.out.println("图片压缩完成!");} catch (Exception e) {e.printStackTrace();return null;}return desPath;}private static void commpressPicCycle(String desPath, long desFileSize,double accuracy) throws IOException {File srcFileJPG = new File(desPath);long srcFileSizeJPG = srcFileJPG.length();// 2、判断大小,如果小于500kb,不压缩;如果大于等于500kb,压缩if (srcFileSizeJPG <= desFileSize * 1024) {return;}// 计算宽高BufferedImage bim = ImageIO.read(srcFileJPG);int srcWdith = bim.getWidth();int srcHeigth = bim.getHeight();int desWidth = new BigDecimal(srcWdith).multiply(new BigDecimal(accuracy)).intValue();int desHeight = new BigDecimal(srcHeigth).multiply(new BigDecimal(accuracy)).intValue();Thumbnails.of(desPath).size(desWidth, desHeight).outputQuality(accuracy).toFile(desPath);commpressPicCycle(desPath, desFileSize, accuracy);}}

通过google插件Thumbnails实现图片指定大小压缩相关推荐

  1. 怎么把照片缩小到200k?图片指定大小压缩怎么弄?

    平时在给账号设置头像时,都会遇到图片过大无法上传的情况,这时候我们可以通过图片压缩指定大小工具来将图片压缩到200kb以下,这样就可以顺利设置头像了,下面一起来看一下图片指定大小压缩(https:// ...

  2. vue 图片指定大小压缩

    1.安装命令npm i image-conversion --save 2.引入插件 import * as imageConversion from "image-conversion&q ...

  3. JAVA根据指定大小压缩图片

    /*** 根据指定大小压缩图片** @param sourceFilePath 源图片路径 + 文件名(例 "D:\\image\\aa.jpg")* @param outFile ...

  4. object-fit 解决图片指定大小被压缩问题

    object-fit 解决图片指定大小被压缩问题 第一次遇到这个属性,是在给video 写 poster的时候,选取的作为poster的img的尺寸有点小,导致video播放器两边有留白.在控制台查看 ...

  5. C# 图片压缩(指定大小压缩和指定尺寸压缩)

    一按大小压缩测试代码: 一测试效果: 一主要代码: /// <summary>/// 压缩图片至200 Kb以下/// </summary>/// <param name ...

  6. 将图片压缩至指定大小Kb(Thumbnailator)

    放代码前,先唠叨唠叨,舒缓一下我的郁闷之情. 今天下午改一个后台管理系统的需求,要求上传的图片要压缩到300kb,感觉不难,就开搞. 先撩拨一下度娘,搞点货出来瞅瞅,不复杂就干脆搬砖算了. 嗯,度娘不 ...

  7. java 压缩图片至指定大小

    需求: 压缩图片至300k以下 一开始没有思路在网上搜,发现google有个插件叫Thumbnails,然后看到了这篇文章: https://blog.csdn.net/u010355502/arti ...

  8. java jsoup抓取百度图片保存到本地,并压缩到指定大小(可指定宽高或者流大小)

    代码如下: package cn.xyz.commons.utils; import java.awt.image.BufferedImage; import java.io.ByteArrayInp ...

  9. Springboot 上传图片压缩至指定大小以下

    /*** @Description:压缩上传* @Author: duyaqiong* @Date: 2020/9/19 14:53* @param imageFile* @param request ...

最新文章

  1. python中if elif语句优化_python – 最有效的方式做一个if-elif-elif-else语句当else做的最多?...
  2. uni-app 组件传值
  3. C语言srand((unsigned)time(NULL))…
  4. 计算机工程硕士论文全套,计算机工程硕士 论文写作注意事项
  5. java string转sql date_Java中的util.Date,sql.Date,sql.Time,String类型转换
  6. struts2 tag if NumberFormatException
  7. 走一条硬件工程师的道路
  8. 【语音识别】基于matlab傅立叶变换0-9数字语音识别【含Matlab源码 384期】
  9. 逆向小试 ―― QQ 自动登录器原理分析
  10. php纯文本源码,[PHP源码]文章原创度检测源码
  11. word中字号与磅值(pt字体)的对应关系
  12. USB总线-Linux内核USB3.0控制器初始化代码分析(三)
  13. 输入框字数统计--过滤拼音
  14. Teams Tab App 分析
  15. 程序员应该了解的计算机知识(一)——基础理论
  16. ​复盘共享经济2020:陷入艰难求生困境,转型能否拯救亏损怪圈
  17. BDB (Berkeley DB)数据库简介(转载)
  18. 数据结构——图的邻接表存储
  19. 不要被数据蒙蔽你的眼睛
  20. HEVC学习笔记 第1章 编码结构

热门文章

  1. 【C语言】函数递归(详解)
  2. 计算机会计二级科目,(完整版)会计科目一览表(一级科目二级科目三级科目)..pdf...
  3. 网络营销招生方案及河南大学生高校名单
  4. JSONObject转对象
  5. Android 动态代理以及利用动态代理实现 ServiceHook
  6. c++继承 基类 派生类 虚函数
  7. 《iPad开发从入门到精通》——6.3节站站查询
  8. Java基于JSP的论坛交流系统
  9. Element表格之表头合并、行合并和列合并
  10. jquery 表格分页等操作实现代码(pagedown,pageup)