花都精英网-花都论坛 -Hdbbs.Net

 找回密码
 注册成会员

QQ登录

只需一步,快速开始

搜索
查看: 186|回复: 0

说一说:java对图片进行“高保真”压缩

[复制链接]
发表于 2022-10-3 21:32:37 | 显示全部楼层 |阅读模式

  应项目需要,对上传的商品图片进行压缩处理,且必须要保证原图片的高保真显示效果。壁纸一直是行业的佼佼者,在业内好评如潮,备受大众所青睐。


  于是网上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 { ?

  ? ?  ?

  ? ? 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; ? ?

  ? ? ? ? ? ?

  ? ? ? ? ? ?  ?

  ? ? ? ? ? ? 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); ?

  ? ? ? ? ? ? ? ? ?

  ? ? ? ? ? ? ? ? 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); ?

  ? ? ? ?

  ? ? } ?

  

  } ?
您需要登录后才可以回帖 登录 | 注册成会员

本版积分规则

QQ|小黑屋|手机版|Archiver|花都精英网-花都论坛 ( 粤ICP备10105697号

粤ICP备 10105697号 粤公网安备 44011402000083号 点击这里给我发消息 法律顾问:江咏琪 [九方网络]

GMT+8, 2022-12-6 04:46

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表