Java - 如何压缩BufferedImage?

时间:2013-02-07 17:58:12

标签: java compression bufferedimage

另外,哪种方法(jpeg,png,gif)在带宽方面最适合压缩?

3 个答案:

答案 0 :(得分:5)

使用何种格式:

  • JPG/JPEG 是lossey压缩 - 你将失去细节。 (质量水平可控,这有帮助)
  • GIF 是无损压缩,但是它转换为8位色彩空间会扭曲许多图像,尤其是自然图像。
  • PNG 是无损压缩。

除非你有令人信服的理由不使用PNG,否则我会推荐它。 More details

使用相同的图像,但使用不同的格式,图像质量通常与图像大小大致相反。我建议使用PNG,如果您的PNG太大,请使用JPEG。 PNG还有支持透明度的好处。

GIF实际上只适用于小型计算机生成的图像,如图标或排版。以上链接还包含图像大小比较。

与往常一样,最好的测试是为您的应用程序全部尝试并进行比较;但是,对于大多数情况下,PNG是一个合理的默认值,其中这种分析的返回值最小。

创建JPEG,PNG或GIF:

从Java BufferedImage实际创建JPEG,PNG或GIF。查看Sun / Oracle的this tutorial。有很多内容可以帮助您,last section明确地解决了创建JPEG,PNG和GIF的问题。以下是来自上述链接教程的修改后的剪辑:

try {
    BufferedImage bufImg = getBufferedImage(); //get BufferedImage from your code...
    File fout = new File("saved.png");
    ImageIO.write(bufImg, "png", fout);
} catch (IOException e) {
    //handle exception...
}

答案 1 :(得分:2)

压缩由各种文件格式本身(JPEG,PNG,GIF等)处理。

“带宽最佳”是一个完全主观的问题,取决于图像本身的大小和内容。

例如,具有少量颜色和少量“平滑”(例如像素图形)的小图像将很好地处理PNG和GIF格式。具有多种颜色和大量平滑处理的较大图像(例如照片)将使用JPEG做得更好,并且使用该格式,您还可以控制编码期间的压缩/质量。

答案 2 :(得分:0)

JPEG最有可能。它默认为75%压缩,但缺乏质量。

如果你想要质量:使用png。你得到透明度,jpg不支持。 pngs的质量也列为100%。如果你想要很好的质量,但文件大小很小,你总是可以使用png并使用压缩类型,类似于文件的base-64。然后只需解压缩并存储图像。它将使用较低的内存量来存储图像,但可以让您有效地保持质量不变。