java图片压缩方法(多种)

使用google工具(推荐,压缩率高,图片清晰)

导入jar包

<dependency>
      <groupId>net.coobird</groupId>
      <artifactId>thumbnailator</artifactId>
      <version>0.4.8</version>
 </dependency>
InputStream in = new File("");
ByteArrayOutputStream out = new ByteArrayOutputStream();
//scale(比例),outputQuality(质量)
Thumbnails.of(in).scale(0.5f).outputQuality(0.25f).toOutputStream(out);
in = new ByteArrayInputStream(out.toByteArray());
重新绘制图片
InputStream in = new File("");
ByteArrayOutputStream out = new ByteArrayOutputStream();
Image image = ImageIO.read(in);
int width = image.getWidth(null);//获取宽度
int height = image.getHeight(null);//获取高度
width = new Double(width/4).intValue();//等比压缩
height = new Double(height/4).intValue();//等比压缩
BufferedImage imageBuffered = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
imageBuffered.getGraphics().drawImage(image, 0, 0, width, height, null);//重新绘制
ImageIO.write(imageBuffered, "png", out);
in = new ByteArrayInputStream(out.toByteArray());
降低分辨率压缩图片
InputStream in = new File("");
ByteArrayOutputStream out = new ByteArrayOutputStream();
BufferedImage imageBuffered = ImageIO.read(in);
Iterator<ImageWriter> iterator = ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter writer = (ImageWriter)iterator.next();
ImageWriteParam imageParam = writer.getDefaultWriteParam();//获取图片默认参数
imageParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);//设置压缩样式
imageParam.setCompressionQuality(0.1f);//设置质量
imageParam.setProgressiveMode(ImageWriteParam.MODE_DISABLED);
ColorModel colorModel = ColorModel.getRGBdefault();
imageParam.setDestinationType(new ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(32, 32)));
IIOImage iImage = new IIOImage(imageBuffered, null, null);//构造容器
writer.setOutput(ImageIO.createImageOutputStream(out));
writer.write(null, iImage, imageParam);
in = new ByteArrayInputStream(out.toByteArray());
图片等比缩放
InputStream in = new File("");
ByteArrayOutputStream out = new ByteArrayOutputStream();
BufferedImage image = ImageIO.read(in);
int w0 = bufImg.getWidth();
int h0 = bufImg.getHeight();
// 获取较大的一个缩放比率作为整体缩放比率
double wRatio = 1.0 * width / w0;
double hRatio = 1.0 * height / h0;
double ratio = Math.min(wRatio, hRatio);
AffineTransformOp ato = new AffineTransformOp(AffineTransform.getScaleInstance(300, 300), null);
BufferedImage bufferimage = ato.filter(image, null);
ImageIO.write(bufferimage, "jpg", out);
in = new ByteArrayInputStream(out.toByteArray());

使用ImageIO.read();读取图片,截图保存会出现有红色的蒙板,原因是读取时有些ICC信息读不到。
→出现红色蒙版的解决方法

————————————————
版权声明:本文为CSDN博主「学习要趁早z」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42677452/article/details/112037350

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习要趁早z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值