【问题标题】:How can I know the jpeg quality of the read image using graphicsmagick我如何知道使用 graphicsmagick 读取图像的 jpeg 质量
【发布时间】:2010-05-03 13:16:38
【问题描述】:

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

【问题讨论】:

    标签: c++ image graphicsmagick


    【解决方案1】:

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

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

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

    【讨论】:

    • 翻译:您想要的值不存储在 JPEG 文件本身中。
    • @Billy ONeal。不仅。 “质量”范围可能因编码器而异——某些编码器的范围可能从 52 到 650,因此为了能够做一些合理的事情,必须知道编码器版本和值。后两者极不可能显式存储在生成的文件中。
    【解决方案2】:

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

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

    并在输出中查找该行

    质量:nn

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

    质量:nn(近似值)

    否则。

    你也可以使用

    gm identify -verbose in.png

    看看

    质量:nn

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

    【讨论】:

    • 这应该是公认的答案。对我来说,它对数码相机的 .jpg 表示“JPEG 质量:nn”。 convert 实际上是 Quality: Fine,其中 identify 返回 99。无论如何,正如对类似问题的回答所指出的那样 - 可以通过重新压缩到相同/最接近的大小(例如通过二进制搜索)来估计质量。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      如果要读取 JPEG 元数据,可以在命令行中使用以下命令:

      gm identify -format "%[JPEG-Quality]" your-photo.jpg
      

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

      也就是说,正如其他用户所说,它只是生成图像的软件生成的数字。事实上,我可以看到 GM 1.4 在没有配置文件信息的情况下在 JPEG 上不返回任何内容,但 GM 1.3.35 对jpeg.c/EstimateJPEGQuality/932/Coder 做了一个疯狂的猜测(返回 100%)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-15
        • 1970-01-01
        • 2013-07-18
        • 2012-07-01
        • 2012-04-30
        • 2014-11-10
        • 1970-01-01
        相关资源
        最近更新 更多