【问题标题】:Read jpg comression quality读取 jpeg 压缩质量
【发布时间】:2018-10-15 15:25:49
【问题描述】:

更新:

进一步阅读后发现,压缩不仅不存储在图像标题中,而且质量数字基本上没有意义,因为不同的程序有不同的处理方式。我仍然把它留在这里,以防有人有一个非常聪明的解决方案。

我确实写了一个日志,并且有一种方法可以记录我最后一次压缩图像的时间,并将其与文件的最后修改时间进行比较,尽管我仍然想解决获得其他图像质量的问题,我可以'不只是按时间修改。

原问题:

我有一个小的Python 脚本,它遍历某些文件夹并使用枕头库将某些.jpg 文件压缩到60 质量。

它可以工作,但是在第二次迭代中它会压缩所有已经压缩的图像。

那么有没有办法获得.jpg 当前具有的压缩或质量,以便我可以跳过已经压缩的文件?

import os
from os.path import join, getsize
from PIL import Image

start_directory = ".\\test"

for root, dirs, files in os.walk(start_directory):
    for f in files:

        try:
            with Image.open(join(root, f)) as im:
                if im.quality > 60: # <= something like this
                    im.save(join(root, f),optimize=True,quality=60)
            im.close() # <= not sure if necessary
        except IOError:
            pass

【问题讨论】:

  • 我认为这个任务是一个非常糟糕的主意,因为 JPEG 的 generation loss 将远远超过您选择的保存质量的差异。 jpegtran 可以对 JPEG 进行一些无损优化。

标签: python python-3.x jpeg pillow image-compression


【解决方案1】:

你在这里问不可能的事。 JPEG“质量”取决于两个因素。首先,组件的抽样。二、量化表的选择。

一些 JPEG 编码器具有“质量”设置,但它们可以做任何事情。一些使用范围为 0 .. 100 其他使用 0..4。我见过0..8。我见过:“高”、“中”、“低”。

您可以想象一下帧中的采样率,您可以比较量化表并将它们与您自己的一些基线表进行比较,以进行“质量”评估。

【讨论】:

    【解决方案2】:

    有办法可能解决这个问题。您可以使用bits per pixel来检查您的 jpeg 压缩率。

    据我了解,JPEG“质量”指标是一个介于 0-100 之间的数字,其中 100 表示无损,0 表示最大压缩率。正如您所说,实际的压缩细节会因编码器而异,并且(可能)因像素块而异(宏块?)。将 60 应用于图像会降低图像质量,但也会减小文件大小,大​​概是原始大小的 60%。

    您所有的图片可能会有不同的尺寸。您要查看的是每像素位数

    问题是:为什么首先要以品质因数 60 进行压缩?您的所有图像都正确吗?您是否要达到特定的文件大小?或者你只是为了让它们变小而高兴吗?

    如果您的目标是每个像素的特定位数,那么您的检查只是计算文件大小除以图像中的像素数,并根据您想要的每像素位数进行检查。如果它更大,请应用压缩。

    当然,您必须比选择品质因数 60 稍微聪明一些。大概 60 意味着原始文件大小的 60%,或者它是一些内部设置。如果是前者,你可以简单地计算一个新值。如果是后者,您可能需要通过试验和改进来获得所需的文件大小。

    【讨论】:

    • 这是不正确的:“JPEG“质量”指标是一个介于 0-100 之间的数字,其中 100 表示无损,0 表示最大压缩。”
    • 谢谢。这只是一个最小的例子。我确实有一些例外,比如 gitignore 以及质量等命令行参数。我这样做不是为了好照片,而是为了纯粹为了记录目的而用廉价相机测量建筑工地的数百张照片。它们占用了我们 90% 的 NAS 空间。在这种情况下,将它们缩小到原始大小的一小部分而在不缩放时在屏幕上没有明显损失就足够了。在某些情况下,调整大小和压缩更高质量可能会更好。这一点都不专业。我只是一个喜欢在周末写代码的工程师。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2021-07-03
    • 2013-01-23
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多