我是Java的新手。我通过保持纵横比将大尺寸的png文件调整为标准文件大小。以下是我使用的代码段。但是我在这段代码中看到的缺点是,在重新调整大小之后,文件大小远远大于原始大小。例如,原始版本为5kb,重新调整大小为16kb。
请帮我避免在调整大小时缩小文件大小
public void SaveImage(String imagePath, BufferedImage image) {
try {
BufferedImage bi = image;
File newImageFile = new File(imagePath);
ImageIO.write(bi, "png", newImageFile);
} catch (IOException e) {
}
}
public BufferedImage resizeImage(final Image image, Dimension newDimension) {
final BufferedImage bufferedImage = new BufferedImage(newDimension.width, newDimension.height, BufferedImage.TYPE_INT_RGB);
final Graphics2D graphics2D = bufferedImage.createGraphics();
//graphics2D.setComposite(AlphaComposite.Src);
graphics2D.drawImage(image, 0, 0, newDimension.width, newDimension.height, null);
graphics2D.dispose();
return bufferedImage;
}
答案 0 :(得分:0)
PNG压缩的工作原理如下:它使用预测器来预测先前值的像素值,“zip”压缩得到的增量变化。图像中存在的低频内容越多,PNG就越能压缩它。
调整大小会改变内容,并可能阻止PNG预测器检测到可以更好地压缩的长跑。缩小图像将增强高频率,从而导致更高的熵,从而导致较低的压缩比。
或者它只是由ImageIO
编写器引起的,它可能没有为PNG设置最佳压缩方法。请查看ImageWriter
及其ImageWriterParam
。可以ImageWriter
获取ImageIO.getImageWritersByFormatName(String formatName)
。