为什么ImageMagick生成的'.png'文件比'.jpg'大得多? '.gif'文件?

时间:2010-04-21 21:31:02

标签: image-processing png imagemagick jpeg gif

我正在使用ImageMagick将一些文件从一种格式转换为另一种格式。我总是认为.png文件应该像.jpg一样大/小,如果不小,并且肯定小于.gif。

然而,当我跑

convert photo.jpg photo.png 

我拿出的文件比原来的jpg大6倍 原始jpg是一张约300x500像素,52 kb的常规照片。输出是相同尺寸的合适png,但大小约为307 kb?

是否有人知道hack正在发生什么?我做错了吗?

P.S:

我在Debian和Windows上都试过了相同的结果。

P.P.S:

此外,当我为此添加调整大小选项并调整为10000 x 10000.转换并调整大小到jpg需要几秒钟,但它可以工作,如果我做同样的png,我jsut strt完全耗尽内存

P.P.P.S: 对于将此问题标记为PNG vs. GIF vs. JPEG vs. SVG - When best to use?的副本的人。请仔细阅读并理解问题。这不是重复,因为这个问题询问'关于以特定应用程序(图像magick)编程生成的文件。您标记为重复的问题是询问哪种图像格式更适合在网络上使用。两个不同的问题。

5 个答案:

答案 0 :(得分:12)

JPG是lossy compression算法,而PNG是lossless one

仅此事实(通常)会使JPG图像小于PNG图像。您可以调整每种格式的压缩率,因此您也可能没有像JPG那样压缩PNG文件。

对于保存照片图像,JPG通常会生成比PNG更小的文件,因为图像中的噪点或随机性更多,可以使用压缩。由图形艺术工具创建的图像往往具有更多的硬边和纯色区域,这将在PNG中更好地压缩。

如果您的图像中有文字,那么PNG将产生质量更好的图像,因为字符的较硬边缘不会像使用JPG时那样模糊。

GIF较小,因为它基于调色板(256色)而不是JPG和PNG中每个像素(或像素组)的单独RGB值。

答案 1 :(得分:9)

PNG格式可以提供每像素24位或每像素8位的图像。 JPG是24位格式,但它使用有损压缩来显着减小文件大小。 PNG和GIF都使用无损压缩,但GIF仅适用于8位,因此它要求您的图像具有256色或更少 - 这通常会产生更加颗粒的图像。

尝试使用ImageMagick中的-colors-dither选项来减少PNG输出中的位数。此时,它应该与GIF文件大小相当。如果您需要进一步减少它,可以使用实用程序来优化PNG。

答案 2 :(得分:5)

.jpeg文件格式是一种有损格式,它会丢弃信息。这样可以获得良好的压缩比。 .gif文件格式没有损失但丢失了其他信息,它只支持256种颜色。 .png文件格式没有损耗保留颜色范围。

答案 3 :(得分:2)

这取决于图像的种类。 JPEG的有损压缩在具有大量色彩渐变(即照片)的图像上非常有效。

在包含由锐边分隔的相同颜色的区域组成的图像上尝试(截图很好,除非它们显示照片桌面背景,并且花哨的窗口边框和Vista和Windows 7的任务栏也倾向于弄乱这个向上)。 JPEG在这种情况下很糟糕,你可能会发现PNG压缩得更好(可能也比GIF好)。

答案 4 :(得分:2)

回复: 有谁知道hack正在发生什么?我做错了吗?

是的,我研究这个,你没有做错任何事,你制作了8位/彩色RGB PNG 我用pngnq(http://pngnq.sourceforge.net/)减少或压缩png来解决它,产生8位/彩色色图PNG。

pngnq在我看来是最改进的项目,因为它是像pngquant等其他人的分支,并且通常在Linux发行版的主流中,所以我只是这样做:

convert photo.jpg png:- | pngnq -s 1 > photo.png 

对于最后一个upvoter(2016):pngnq被弃用,而不是pngquant(https://github.com/pornel/pngquant

相关问题