如何使用GraphicsMagick确定读取图像的JPEG质量

3
当我使用Magick::readImages(...)函数读取jpeg图像时,如何知道图像的估计jpeg质量?我知道如何在写入图像时设置质量,但它与原始图像的质量无关。例如:当我读取一个80%质量的jpeg图像并使用90%的质量进行写入时,我将得到比原始图像更大的图像,因为90%不是基于原始80%的90%。我如何知道读取图像的jpeg质量?
4个回答

6
这是不可能的,没商量。 JPEG质量设置只是传递给编码器的一个数字,影响编码器处理数据的方式。
它甚至不是任何东西的百分比 - 它只是一些设置,影响编码器操纵和转换数据的程度。无论您在哪里看到JPEG质量附近的百分号,都可以忽略它 - 在那里毫无意义。
因此,无论编码器如何,都不可能找到编码器用于生成此图像的JPEG质量设置值。唯一的方法是获得原始图像,并尝试所有合理可能的设置值,直到达到相同的结果。

5
您想获取的值并没有存储在 JPEG 文件本身中。 - Billy ONeal
2
@Billy ONeal。不仅如此,"质量"范围可能因编码器而异 - 有些编码器的范围可能从52到650,因此为了能够做出合理的事情,必须知道编码器版本和值。后两者极不可能在生成的文件中明确存储。 - sharptooth

3
使用GraphicsMagick(或ImageMagick)实现并不难,只需要执行以下命令:

gm convert -log %e -debug coder in.jpg junk.ppm

然后在输出中寻找以下行:

Quality: nn

如果图像是由Independent JPEG Group软件创建的,或者是:

Quality: nn (近似值)

否则,你也可以使用以下命令:

gm identify -verbose in.png

查看以下行:

Quality: nn

但是,这个方法不能区分精确质量和近似质量。


这应该是被接受的答案。对我来说,从数码相机中获取的 .jpg 格式显示为“JPEG-Quality: nn”。convert 实际上显示为“Quality: Fine”,而 identify 返回了 99。无论如何,与类似问题的答案一样 - 可以通过重新压缩到相同/最接近的大小(例如通过二进制搜索)来估计质量。 - Tomasz Gandor

2

0
如果您想读取JPEG元数据,可以在命令行中使用以下内容:
gm identify -format "%[JPEG-Quality]" your-photo.jpg

在C++中,可能会使用IdentifyImagehttps://imagemagick.org/api/MagickCore/identify_8c.html#a91079e7db05c1bad53b2dbb2b01f41ba

话虽如此,正如其他用户所说,这只是由生成图像的软件生成的数字。事实上,我可以看到GM 1.4在没有配置文件信息的JPEG上返回空值,但GM 1.3.35使用jpeg.c/EstimateJPEGQuality/932/Coder(返回100%)进行猜测。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接