图片压缩尺寸与大小

/**java

* 按尺寸质量压缩(测试)测试

* @param isspa

* @param toorm

* @param qualityblog

* @throws IOException图片

*/内存

public static void compressQuality(InputStream is, File to, float quality, int maxWidth, int maxHeight) throws IOException{ci

//压缩大小get

BufferedImage image = ImageIO.read(is);it

if(image==null)return;

Integer width = image.getWidth();

Integer height = image.getHeight();

if(width>maxWidth || height>maxHeight){

ResampleOp resampleOp = new ResampleOp(DimensionConstrain.createMaxDimension(maxWidth, maxHeight));

image = resampleOp.filter(image, null);

}

// 获得指定Format图片的writer 

Iterator<ImageWriter> iter =  ImageIO.getImageWritersByFormatName("jpeg");

ImageWriter imageWriter = iter.next();

// 获得指定writer的输出参数设置(ImageWriteParam )  

        ImageWriteParam iwp = imageWriter.getDefaultWriteParam();  

        iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); // 设置能否压缩  

        iwp.setCompressionQuality(quality); // 设置压缩质量参数  

        iwp.setProgressiveMode(ImageWriteParam.MODE_DISABLED);

        

        ColorModel colorModel = ColorModel.getRGBdefault();  

        // 指定压缩时使用的色彩模式  

        iwp.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel,  

                colorModel.createCompatibleSampleModel(16, 16)));

        

        // 开始打包图片,写入byte[]  

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); // 取得内存输出流  

        IIOImage iIamge = new IIOImage(image, null, null); 

        

        // 此处由于ImageWriter中用来接收write信息的output要求必须是ImageOutput  

        // 经过ImageIo中的静态方法,获得byteArrayOutputStream的ImageOutput  

        imageWriter.setOutput(ImageIO  

                .createImageOutputStream(byteArrayOutputStream));  

        imageWriter.write(null, iIamge, iwp); 

        

        InputStream sbs = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());

        ImageIO.write(ImageIO.read(sbs), "png", to);

        

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值