[英]Compress image size using Java
我想使用 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;
}
问题是 - 处理图像后,我得到了结果 - 文件大小增加而不是减少。 原始图像的尺寸小于压缩后的尺寸。 有关如何解决此问题的任何建议?
作为这个问题的解决方案,我可以推荐 TinyPNG 的 API。
您可以使用它来压缩和调整图像大小。
它适用于 .jpeg 和 .png。
不幸的是,有损 JPEG 压缩比无损 PNG 压缩要好得多。 您可以限制图像的宽度和高度并按比例缩放。
所以我会切换到 JPEG 并限制大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.