我想使用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;
}问题是-经过图像处理后,我得到的结果-文件大小增加而不是减少。原始图像的大小比压缩的要小。对于如何解决这个问题,有什么建议吗?
发布于 2020-01-09 16:38:42
不幸的是,有损JPEG压缩比无损PNG压缩要好得多。您可以按比例限制图像和缩放的宽度和高度。
所以我会切换到JPEG并限制大小。
发布于 2020-01-10 09:47:34
作为这个问题的解决方案,我可以推荐TinyPNG的API。
您可以使用它来压缩和调整图像大小。
它适用于.jpeg和.png。
Documentation: https://tinypng.com/developers/reference/java
https://stackoverflow.com/questions/59667669
复制相似问题