使用ImageMagick将图像转换为PNG与JPG格式

43 浏览
0 Comments

使用ImageMagick将图像转换为PNG与JPG格式

我试图将一些图像转换为PNG或JPG格式,并试图找出哪种格式会得到更小的文件大小。在大多数情况下,PNG会给我最好的压缩效果,但有些奇怪的图像使用JPG会得到更好的压缩效果。我有两个问题:

  1. 导致图像给出更好结果的特征是什么?
  2. 有没有办法在转换之前预先确定哪种格式会给我更好的结果?

这张照片使用PNG格式得到了更好的压缩效果

使用PNG格式得到更好压缩效果的示例图像

这张照片使用JPG格式提供了明显更好的压缩效果

输入图像描述

0
0 Comments

问题:ImageMagick中将图像转换为PNG和JPG的原因以及解决方法是什么?

在这个讨论中,某些情况下使用图像的熵(Entropy)作为选择JPEG或PNG的判别标准。熵越高的图像更适合压缩为JPEG,而熵较低的图像则更适合保存为PNG。为了计算图像的熵,可以使用ImageMagick的identify命令。下面是一个使用identify命令计算图像熵的示例代码:

identify -verbose -features 1 image.jpg | grep -i -A1 entropy

这段代码会输出图像的熵值,包括总熵、水平熵、垂直熵、左对角线熵、右对角线熵等。在这里,我们只需关注最后一个值即可。

为了更好地理解熵与图像格式的关系,有人写了一个脚本来计算JPEG和PNG格式的文件大小比和熵。这个脚本会将输入文件转换为JPEG和PNG格式,并计算它们的文件大小比和熵。以下是该脚本的代码:

#!/bin/bash
f="$1"
jsize=$(convert "$f" -strip JPG:- | wc -c)
psize=$(convert "$f" PNG:- | wc -c)
jpratio=$(echo $jsize*100/$psize | bc)
# Make greyscale version for entropy calculation
rm temp*.jpg 2> /dev/null
convert "$f" -colorspace gray temp.jpg
entropy=$(identify -verbose -features 1 temp.jpg | grep -A1 "  Entropy:" | tail -n 1 | awk -F, '{print $5}')
echo $jpratio:$entropy

可以通过以下方式使用这个脚本:

./go image.jpg
8:3.3       # JPEG是PNG的8倍大小,熵为3.3

为了测试熵与图像格式的关系,有人对图像添加了不同数量的噪点来增加其熵值,并通过脚本计算了每个图像的文件大小比和熵。然后使用gnuplot绘制了熵与文件大小比的图表。这个图表显示,随着ImageMagick的熵值增加,JPEG文件大小与PNG文件大小的比例趋向于JPEG。这个实验可能不够科学,但是至少可以作为一个参考。

根据图像的熵值可以选择将图像保存为JPEG或PNG格式。熵值越高的图像适合保存为JPEG,而熵值较低的图像适合保存为PNG。这个选择可以通过ImageMagick的identify命令计算熵值,并使用脚本计算文件大小比和熵值来辅助判断。

参考资料:

- https://stackoverflow.com/questions/15474173

0
0 Comments

问题的原因是不同的图像格式适用于不同的用例。JPG对于文本的处理效果通常不好,会导致图像模糊。而对于照片来说,这通常不是一个问题;对于高分辨率的文本图像,这个问题也会比较小(因为模糊半径相对于图像大小较小)。

需要注意的是,PNG通常用于无损压缩图像,而JPG则是有损压缩的。JPG文件的压缩比较高,所以文件大小会小很多,但是会导致更明显的图像伪影。还需要注意的是,有一些程序可以对PNG进行有损压缩(在某些情况下可能比JPG压缩效果更好)。

简而言之:对于计算机生成的图像,PNG格式效果更好,因为这些图像通常比较规则,容易压缩。而对于照片来说,JPG格式效果更好,因为照片通常具有更多的抖动,这很难进行压缩。当你不使用ImageMagick和libpng时,还有其他可能性可供选择。

解决方法是尝试使用两种格式进行压缩,并查看输出结果,比起训练神经网络来判断哪种格式能够更好地压缩,这种方法可能需要更长的时间且不够准确。此外,还有一些近似的测量方法可以判断图像是否过于模糊(如果你想进一步调整压缩级别,这可能会有所帮助)。

0
0 Comments

问题的出现是因为用户对于使用ImageMagick将图像转换为PNG和JPG格式时的差异性产生了困惑。用户指出PNG格式可以支持Alpha透明度,而JPG格式会以矩形形式覆盖图像背后的部分内容。然而,用户并不满足于这个答案,想要知道更多关于使用ImageMagick进行图像转换的信息。

为了解决这个问题,我们可以提供以下的解决方法:

1. 首先,确保已经安装了ImageMagick。可以通过运行以下命令来检查是否已经安装了ImageMagick:

convert -version

2. 接下来,我们可以使用以下命令将图像转换为PNG格式:

convert input.jpg output.png

这将把名为"input.jpg"的图像转换为PNG格式,并保存为"output.png"。

3. 类似地,如果要将图像转换为JPG格式,可以使用以下命令:

convert input.png output.jpg

这将把名为"input.png"的图像转换为JPG格式,并保存为"output.jpg"。

通过使用ImageMagick的convert命令,我们可以轻松地将图像从一种格式转换为另一种格式。这样,用户就可以根据自己的需求选择PNG格式或JPG格式,并了解它们的差异性。

总之,使用ImageMagick进行图像转换时,PNG格式可以支持Alpha透明度,而JPG格式会以矩形形式覆盖图像背后的部分内容。用户可以根据自己的需求选择适合的格式,并通过ImageMagick的convert命令进行转换。

0