zoukankan      html  css  js  c++  java
  • java压缩图片质量

    使用了工具thumbnailator,据说thumbnailator是一个非常好的图片开源工具,使用起来很方便。不过没仔细看过,我只是需要压缩图片,让其占用空间变小而已。使用maven引入jar包

    <!-- 图片缩略图 -->
    <dependency>
        <groupId>net.coobird</groupId>
        <artifactId>thumbnailator</artifactId>
        <version>0.4.8</version>
    </dependency>

    代码如下即可:

            Thumbnails.of("C:/Users/my/Pictures/this/2.jpg")
                      .scale(1f)
                      .outputQuality(0.25f)
                      .toFile("C:/Users/my/Pictures/this/2(1).jpg");

    源图片为1.2MB,压缩后图片大小为157KB

    另外一种压缩,我这边的场景是,开始有一张图片只有200~300KB左右,但是我们要绘制一些特殊的图片或水印在上面,绘制完成后,就变成3、4M左右了,经过下面这种方式压缩后,大概变为1/3大小,但是分辨率和清晰度基本看不出有什么变化

    import java.awt.image.BufferedImage;
    import java.awt.image.ColorModel;
    import java.io.BufferedReader;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Map;
    import java.util.concurrent.Callable;
    
    import javax.imageio.IIOImage;
    import javax.imageio.ImageIO;
    import javax.imageio.ImageTypeSpecifier;
    import javax.imageio.ImageWriteParam;
    import javax.imageio.ImageWriter;
    
    import org.apache.commons.lang.StringUtils;
    
    import com.grand.mysql_handler.mapper.SystemMapper;
    
    import net.sf.json.JSONObject;
    
        public static byte[] compressPic(BufferedImage image) throws IOException  {
            ByteArrayOutputStream outArray = new ByteArrayOutputStream();
            // 指定写图片的方式为 jpg
            ImageWriter imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();
            ImageWriteParam imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(
                    null);
            // 要使用压缩,必须指定压缩方式为MODE_EXPLICIT
            imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
            // 这里指定压缩的程度,参数qality是取值0~1范围内,
            imgWriteParams.setCompressionQuality((float)1);
            imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
            ColorModel colorModel = image.getColorModel();// ColorModel.getRGBdefault();
            imgWriteParams.setDestinationType(new ImageTypeSpecifier(
                    colorModel, colorModel.createCompatibleSampleModel(16, 16)));
            try {
                imgWrier.reset();
                // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何
                // OutputStream构造
                imgWrier.setOutput(ImageIO.createImageOutputStream(outArray));
                // 调用write方法,就可以向输入流写图片
                imgWrier.write(null, new IIOImage(image, null, null),
                        imgWriteParams);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return outArray.toByteArray();
        }
  • 相关阅读:
    App.config使用ASP.NET Web Project的Transformation模式编译方式
    简易扩展Visual Studio UnitTesting支持TestMethodCase
    Microsoft Unity ---- 系列文章
    Reflector 7.0.0.420 注册破解版
    在Vue前端界面中,几种数据表格的展示处理,以及表格编辑录入处理操作。
    基于Vue的工作流项目模块中,使用动态组件的方式统一呈现不同表单数据的处理方式
    在Vue前端项目中,附件展示的自定义组件开发
    在Vue&Element前端项目中,对于字典列表的显示处理
    kestrel对接elasticsearch踩坑记
    华为智慧安平解决方案——安防视频监控是核心
  • 原文地址:https://www.cnblogs.com/TheoryDance/p/7339893.html
Copyright © 2011-2022 走看看