Java 如何在不改变大小的情况下压缩png图像
我需要压缩png图像,但当我尝试这样做时,我会得到一个更大尺寸的新png图像。我的代码如下所示:Java 如何在不改变大小的情况下压缩png图像,java,Java,我需要压缩png图像,但当我尝试这样做时,我会得到一个更大尺寸的新png图像。我的代码如下所示: public static BufferedImage compress(final BufferedImage originalImg, final int ratio, final String extension) { BufferedImage img = null; if (originalImg != null && ratio >
public static BufferedImage compress(final BufferedImage originalImg, final int ratio, final String extension) {
BufferedImage img = null;
if (originalImg != null && ratio > 0) {
final ImageWriter writer = ImageIO.getImageWritersByFormatName(extension).next();
final ImageWriteParam writeParam = writer.getDefaultWriteParam();
try {
if (writeParam.canWriteCompressed()) {
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionQuality(ratio / 100f);
final ByteArrayOutputStream output = new ByteArrayOutputStream();
final ImageOutputStream outputStream = ImageIO.createImageOutputStream(output);
writer.setOutput(outputStream);
writer.write(null, new IIOImage(originalImg, null, null), writeParam);
output.close();
outputStream.close();
ByteArrayInputStream is = new ByteArrayInputStream(output.toByteArray());
img = ImageIO.read(is);
} else {
img = originalImg;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
writer.dispose();
}
}
return img;
}
我得到这个图像,它的大小是49kb,但结果是420kb
我错在哪里?您不是在压缩PNG,而是在将JPG转换为PNG。JPG更适合这种带有颜色梯度等的照片(-ish)图像,因此它比PNG小,即使后者被压缩。@tobias_k我正试图压缩
PNG
图像,但我无法上传它。你能给我一些关于如何压缩png图像的建议吗ImageIO
library不适合我。@约翰:PNG是一种无损格式。它永远不会为这些类型的图像生成一个小文件大小(带颜色渐变的照片)。它最适合于简单的线条艺术风格的图像。JPEG更适合于带有照片的图片,但有损(即,它不会完美地再现原始图片)。