应项目需要,对上传的商品图片进行压缩处理,且必须要保证原图片的高保真显示效果。

于是网上down资料,找到其中效果最好的一种方法,供大家使用和学习:

代码如下:

package com.hhsj.demo; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class ImageCompress2 {       /**       * @param im       * 原始图像       * @param resizeTimes       * 倍数,比如0.5就是缩小一半,0.98等等double类型       * @return 返回处理后的图像       */       public BufferedImage zoomImage(String src) {           BufferedImage result = null;           try {               File srcfile = new File(src);               if (!srcfile.exists()) {                   System.out.println("文件不存在");               }               BufferedImage im = ImageIO.read(srcfile);                  /* 原始图像的宽度和高度 */               int width = im.getWidth();               int height = im.getHeight();                              //压缩计算               float resizeTimes = 0.3f;  /*这个参数是要转化成的倍数,如果是1就是转化成1倍*/                              /* 调整后的图片的宽度和高度 */               int toWidth = (int) (width * resizeTimes);               int toHeight = (int) (height * resizeTimes);                  /* 新生成结果图片 */               result = new BufferedImage(toWidth, toHeight,                       BufferedImage.TYPE_INT_RGB);                  result.getGraphics().drawImage(                       im.getScaledInstance(toWidth, toHeight,                               java.awt.Image.SCALE_SMOOTH), 0, 0, null);                             } catch (Exception e) {               System.out.println("创建缩略图发生异常" + e.getMessage());           }                      return result;          }               public boolean writeHighQuality(BufferedImage im, String fileFullPath) {               try {                   /*输出到文件流*/                   FileOutputStream newimage = new FileOutputStream(fileFullPath);                   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);                   JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(im);                   /* 压缩质量 */                   jep.setQuality(0.9f, true);                   encoder.encode(im, jep);                  /*近JPEG编码*/                   newimage.close();                   return true;               } catch (Exception e) {                   return false;               }           }                public static void main(String[] args) {            String inputFoler = "D:\\img.jpg" ;             /*这儿填写你存放要缩小图片的文件夹全地址*/           String outputFolder = "D:\\newImg.jpg";             /*这儿填写你转化后的图片存放的文件夹*/           ImageCompress2 narrowImage = new ImageCompress2();            narrowImage.writeHighQuality(narrowImage.zoomImage(inputFoler), outputFolder);                  }      }

java+图片高保真压缩_java对图片进行“高保真”压缩相关推荐

  1. java 文件压缩_java实现文件压缩

    java实现文件压缩:主要是流与流之间的传递 代码如下: package com.cst.klocwork.service.zip; import java.io.File; import java. ...

  2. java mp3文件压缩_java实现文件压缩

    java实现文件压缩:主要是流与流之间的传递 代码如下: package com.cst.klocwork.service.zip; import java.io.File; import java. ...

  3. Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理

    前言 java开发中经常遇到对图片的处理,JDK中也提供了对应的工具类,不过处理起来很麻烦,Thumbnailator是一个优秀的图片处理的开源Java类库,处理效果远比Java API的好,从API ...

  4. java gzip压缩_Java GZIP示例–压缩和解压缩文件

    java gzip压缩 Welcome to Java GZIP example. GZIP is one of the favorite tool to compress file in Unix ...

  5. 使用react-cropper结合图片压缩方法对图片进行裁剪压缩处理

    最近项目要使用图片裁剪上传,因为项目采用的是react+antd,所以第一时间想到的是ImgCrop插件,但是这不满足项目需求,项目要求的是能够缩放裁剪框,最后确定了采用react-cropper来实 ...

  6. java 图片 内存溢出_Java修改图片尺寸,总是报内存溢出怎么解决?

    项目需求:有很多尺寸很大的图片(图片大小可能几十MB,甚至上百MB),需要等比例缩小它们的尺寸,相当于生成缩略图. 例如:原图8268x6201,需要压缩成400x300. 我现在的方法:将图片整个读 ...

  7. java 图片传输方式_Java图像传输方法

    在研发B/S视频系统时候涉及到了图片在网络中的传输,研究了一些资料,也积累了部分经验: 一.序列化后传输 图像对象可以编码成指定图像格式文件保存在硬盘上,需要时再对其进行解码读入内存.但是除了这样还有 ...

  8. java 图片上传_java web图片上传和文件上传实例

    本篇文章主要介绍了java web图片上传和文件上传实例,具有一定的参考价值,有需要的可以了解一下. 图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多 ...

  9. java图片转字符_java实现图片转字符图(看的过去的亚子)

    普通图片转换为ASSIC码灰度图片 原图: 效果图: 转换方法 读取图片文件到BufferedImage 读取BufferedImage中的RGB值 将RGB三色值按照(0.3,0.59,0.11)权 ...

  10. java 图片相似搜索_java获取两张图片的相似度

    package com.sinosoft.lis.utils; import java.awt.Graphics2D; import java.awt.color.ColorSpace; import ...

最新文章

  1. 高房价可控制人口增长与人口素质?
  2. postgresql_PostgreSQL开放自由
  3. scala 当前日期_如何在Scala中检查当前日期和时间?
  4. python流程自动化_基于Python的SAP流程自动化
  5. 计算机在材料科学与工程中的应用,计算机在材料科学与工程中的应用
  6. app闪退后重启_安卓APP崩溃(crash)后重新启动,捕获全局异常重启APP
  7. Ubuntu解决依赖关系问题
  8. tensorflow2 serving
  9. 第二章 核心动画渲染框架
  10. 2022 极术通讯-搭载安谋科技“星辰”STAR-MC1处理器的上海航芯ACM32磁链观测器算法方案
  11. Luat模块应用手册-指南-Luat二次开发教程指南-功能开发教程-长连接超低功耗方案
  12. 腾讯地图只显示某一区域,覆盖图,marker自定义图标和文本标注
  13. 乔治·布尔二百周年:数理逻辑奠基者其人其事
  14. Python输出菱形图案
  15. java数组下标异常越界程序,Java程序运行时会自动检查数组的下标是否越界,如果越界,会抛出下面的哪一个异常?...
  16. [PCIe]LTSSM与电源管理
  17. 常用公共类代码一之数据库的连接
  18. conda install -y 参数
  19. 离散数学__第2章命题逻辑的推理理论__析取范式和合取范式
  20. 计算机技术在中医药中的应用,计算机药物虚拟筛选技术在中医药领域中的应用前景...

热门文章

  1. 无线网卡驱动正常却搜索不到无线信号
  2. 数字键盘(触屏键盘)
  3. IDEA部署web项目时,Artifact中war和war exploded的区别
  4. 计算机导论.mobi,计算思维:计算学科导论
  5. 基于networkx的《人民的名义》人物关系图
  6. c语言父子线程交替打印,多线程面试题之【三线程按顺序交替打印ABC的方法】...
  7. Oracle中to_date函数用法
  8. [应用广播], 一览华夏文化,诗词三万首震撼上线
  9. MySQL数据库--韩顺平老师课
  10. 利用Oh-My-Zsh打造你的超级终端