【发布时间】:2020-04-27 06:38:40
【问题描述】:
我想使用 Java 压缩(减小)图像大小。我们可以上传 jpg/jpeg/png 格式的图片。图片的一般格式是PNG。所以,图片上传到服务器后,我们需要压缩(减小文件大小)并将其转换为PNG。
我有下一个压缩图像的代码:
BufferedImage bufferedImage = ImageIO.read(inputStream);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
switch (imageType) {
case PNG:
case JPG:
// need Java 9+ for PNG writer support
ImageWriter writer = ImageIO.getImageWritersByFormatName(imageType.getExtension()).next();
ImageOutputStream ios = ImageIO.createImageOutputStream(outputStream);
writer.setOutput(ios);
ImageWriteParam param = writer.getDefaultWriteParam();
if (param.canWriteCompressed()) {
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.3f);
}
writer.write(null, new IIOImage(bufferedImage, null, null), param);
writer.dispose();
return new ByteArrayInputStream(outputStream.toByteArray());
default:
log.warn("Image type unknown");
return null;
}
问题是 - 处理图像后,我得到了结果 - 文件大小增加而不是减少。原始图像的尺寸小于压缩后的尺寸。 有关如何解决此问题的任何建议?
【问题讨论】:
-
你在处理什么样的图像? PNG 可能不是每种图像(例如照片)的最佳选择。
-
服务器上的@Michael 所有图像都保存在 PNG 中。但用户可以上传 jpg/jpeg 和 png。它是用户个人资料图片、用户帖子图片、相册等图片。
-
压缩需要无损吗?如果是这样,也许您可以使用 WebP 而不是 PNG?
标签: java image-processing image-compression