为什么 ImageMagick setImageCompressQuality 0 会导致文件大小比 1 更大?

问题描述 投票:0回答:1

我正在将 PNG 图像转换为 WebP 并尝试使用 ImageMagick 进行最大压缩。

我运行 ImageMagick 的 PHP 代码如下所示:

$imagick = new Imagick($filePath);

// Set WebP format and quality
$imagick->setImageFormat('webp');
$imagick->setImageCompressionQuality(0);

// Set WebP-specific compression parameters
$imagick->setOption('webp:method', '6'); // Maximum compression speed (0-6)

// Remove unnecessary metadata to reduce size further
$imagick->stripImage();

$outputFile = $outputDir . '/' . $fileName . '.webp';
$imagick->writeImage($outputFile);

从 600 KB PNG 源文件生成 217 KB WebP 文件。

但是,当我在 macOS 上的 PixelMator Pro 中手动进行此转换时,我得到的文件大小仅为 45 KB(“导出为 Web”为 WebP,质量为 0,没有其他设置)。 当我在 PixelMator Pro 中打开 ImageMagick 生成的 217 KB WebP 文件并使用质量为 0 的“导出为 Web”时,我得到一个 56 KB 的文件。 所以我想知道为什么 PixelMator 比 ImageMagick 效率高得多。

所以我尝试了

setImageCompressionQuality(1)
,然后ImageMagick生成了一个58KB的文件,实际上与PixelMator相同。

为什么 ImageMagick 会为

0
质量生成更大的文件大小? 我在 macOS 上的 ImageMagick 7.1.1-41 和 debian 上的 6.9.11-60 上确认了此行为。

imagemagick
1个回答
0
投票

根据我使用 ImageMagick 的经验,将压缩质量设置为 0 并不表示最高质量或最大压缩。它通常表示最快,但由于压缩算法效率低下,导致文件大小较大。

通常,1 是最低质量和最高压缩率。我找不到有关 WebP 质量值的具体文档,但 JPEG 文档提到质量设置 1 是最低质量级别。

基于 imagemagick 文档

对于 JPEG 和 MPEG 图像格式,质量为 1(最低图像质量和最高压缩)到 100(最佳质量但效率最低的压缩)。默认情况下,如果可以确定,则使用输入图像的估计质量,否则为 92。当质量为 90 或更高时,不会对色度通道进行下采样。使用 -sampling-factor 选项指定色度下采样的因子。

对于 JPEG-2000 图像格式,使用非线性方程将质量映射到 Jasper 库所需的压缩比。该非线性方程旨在粗略地近似 JPEG v1 格式提供的质量。默认质量值100,要求无损压缩。质量为 75 会导致请求 16:1 压缩。

对于 MNG 和 PNG 图像格式,质量值设置 zlib 压缩级别(质量 / 10)和过滤器类型(质量 % 10)。默认 PNG“质量”为 75,这意味着具有自适应 PNG 过滤的压缩级别 7,除非图像具有颜色图,在这种情况下,这意味着没有 PNG 过滤的压缩级别 7。

对于压缩级别 0(质量值小于 10),使用仅 Huffman 策略,这是最快但不一定是最差的压缩。

© www.soinside.com 2019 - 2024. All rights reserved.