3

当我使用 Magick::readImages(...) 函数读取 jpeg 图像时。我怎样才能知道图像的估计 jpeg 质量?当我想写图像时,我知道如何设置质量,但它与原始图像的质量无关,例如:当我读取质量为 80% 的 jpeg 图像时,我使用 90% 编写它质量 我会得到比原始图像更大的图像,因为 90% 不是原始 80% 中的 90%。我如何知道读取图像的 jpeg 质量?

4

4 回答 4

6

这是不可能的,期间。JPEG 质量设置只是传递给编码器的一个数字,会影响编码器处理数据的方式。

它甚至不是任何东西的百分比——它只是一些影响编码器操作和转换数据的积极程度的设置。无论您在哪里看到接近JPEG 质量的百分号,都可以忽略它 - 它在那里毫无意义。

因此,无论编码器如何,都无法找到编码器用于生成此图像的JPEG 质量设置值。唯一的方法是获取原始值并尝试所有合理可能的设置值,直到达到相同的结果。

于 2010-05-03T13:22:19.903 回答
3

使用 GraphicsMagick(或使用 ImageMagick)既不是不可能也不是困难。类型

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

并在输出中查找该行

质量:nn

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

质量:nn(近似值)

除此以外。

你也可以使用

gm identify -verbose in.png

看看

质量:nn

线; 但是,这并不能区分确切的质量和近似的质量。

于 2017-08-10T22:16:07.497 回答
2

这是可能的,但很困难。代码必须像人们一样检查图像。这是一篇关于该主题的论文http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.4.4621&rep=rep1&type=pdf

于 2013-01-10T13:07:01.377 回答
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%)。

于 2022-02-16T05:48:02.213 回答