【问题标题】:Reduce the filesize of a JPG file in java在java中减少JPG文件的文件大小
【发布时间】:2020-03-31 09:04:21
【问题描述】:

我们生成了一个 JPG 文件,使用 org.openqa.selenium.TakesScreenshot

File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
File dest = new File("C:\\Users\\admin\\Desktop\\Images\\29_18-03-20-07-11-47.jpg");
FileHandler.copy(src, dest);

由于生成的图像的文件大小为 1.5MB 到 2.9MB。我们希望将文件大小减小到 kbs。

我们尝试了 ImageIO,但生成的图像没有原始文件颜色空间/颜色配置文件。

File input = new File("C:\\Users\\admin\\Desktop\\Images\\29_18-03-20-07-11-47.jpg");
File compressedImageFile = new File("C:\\Users\\admin\\Desktop\\Images\\compressed_image7.jpg");

BufferedImage image = ImageIO.read(input);
OutputStream os = new FileOutputStream(compressedImageFile);
Iterator<ImageWriter writers = ImageIO.getImageWritersByFormatName("jpg");

ImageWriter writer = (ImageWriter) writers.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(os);
writer.setOutput(ios);

ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.05f);         
writer.write(null, new IIOImage(image, null, null), param);

无法分享图片或屏幕截图

有人可以告诉我如何减少文件大小

【问题讨论】:

标签: java selenium screenshot filesize javax.imageio


【解决方案1】:

尝试使用无损 JPEG

ImageWriter writer= (ImageWriter) ImageIO.getImageWritersByFormatName("jpeg").next();
ImageWriteParam param= writer.getDefaultWriteParam();
param.setCompressionMode(param.MODE_EXPLICIT);
param.setCompressionType("JPEG-LS");
writer.setOutput(ImageIO.createImageOutputStream(new File(path)));
writer.write(null, new IIOImage(image, null, null), param);

【讨论】:

  • JPEG 默认是有损的。 JPEG-LS 是无损的!
  • 获取 java.lang.IllegalArgumentException:未知压缩类型!也试过JPEG,但图像没有变化
猜你喜欢
  • 1970-01-01
  • 2011-08-03
  • 2011-01-10
  • 1970-01-01
  • 2020-04-23
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多