Imagick::setImageCompressionQuality

(PECL imagick 2, PECL imagick 3)

Imagick::setImageCompressionQuality设置图像压缩质量

描述

public Imagick::setImageCompressionQuality(int $quality): bool

设置图像压缩质量。

参数

quality

图像压缩质量,以整数形式表示

返回值

如果成功,则返回 true

错误/异常

发生错误时,抛出 ImagickException 异常。

示例

示例 #1 Imagick::setImageCompressionQuality()

<?php
function setImageCompressionQuality($imagePath, $quality) {
$imagick = new \Imagick(realpath($imagePath));
$imagick->setImageCompressionQuality($quality);
header("Content-Type: image/jpg");
echo
$imagick->getImageBlob();
}

?>

添加注释

用户贡献注释 6 个注释

2
dylan dot arnold at gmail dot com
11 年前
在尝试获得良好的 png 压缩时,我遇到了奇怪的结果。

我使用了 Imagick::COMPRESSION_ZIP

以下是一些压缩级别的文件大小。

0: 236,100
1: 274,035
9: 258,379
50: 241,282
100: 240,156

请注意,最佳结果在 0 处。此外,我花了很长时间试图获得与 GIMP 相似的结果。确保您的图像深度设置为 8,它似乎是每个通道 16 位,至少对我来说是这样。

您可以使用 identify -verbose filename.png 进行检查。

您还可以使用 $image->stripImage(); 进一步减少文件大小。
0
nulll
7 个月前
在 php 8.1.25、ImageMagick 7.1.1-22 上测试
`setImageCompressionQuality()` 对 `avif` 图像没有任何作用。
无论您设置什么值,结果图像的大小始终相同。
0
匿名
1 年前
setImageCompressionQuality 方法接受一个整数作为其参数,表示所需的图像压缩质量,范围从 0 到 100,其中 0 表示最低质量(最高压缩,损失最大),而 100 表示最高质量(最低压缩,无损)。

* 质量 0:最低质量,最高压缩,损失最大。这将导致非常小的文件大小,但图像可能会出现明显的伪影和清晰度下降。

* 质量 100:最高质量,最低压缩,无损。图像将保留所有原始细节,但文件大小会更大。

在大多数情况下,70 到 90 之间的质量值在文件大小和图像质量之间取得了良好的平衡。但是,最佳值取决于您的具体用例以及在保持可接受的图像清晰度的同时您能够容忍的压缩级别。最好尝试不同的质量值,以找到最适合您的那个。
0
vhpvhp at msn dot com
5 年前
对于 PNG 图像,`setImageCompressionQuality()` 根本不起作用,生成的图像文件长度完全相同。

但我发现了一种有效的方法,那就是使用 `setOption('png:compression-level', 9)`,其值范围是 0-9。
0
snipes2083 [at] yahoo com
14 年前
此示例展示了如何设置压缩类型、设置压缩质量、创建缩略图并删除不必要的数据以减小文件大小。

这将使用参考中的以下函数
Imagick::setImageCompression
Imagick::setImageCompressionQuality
Imagick::stripImage
Imagick::thumbnailImage
Imagick::writeImage

<?php
$image
= 'image.jpg';
$directory = '/path/to/image';
$image_location = $directory . "/" . $image;
$thumb_destination = $directory . "/t" . $image;
$compression_type = Imagick::COMPRESSION_JPEG;

$im = new Imagick($image_location);
$thumbnail = $im->clone;

$thumbnail->setImageCompression($compression_type);
$thumbnail->setImageCompressionQuality(40);
$thumbnail->stripImage();
$thumbnail->thumbnailImage(100,null);
$thumbnail->writeImage($thumb_destination);
?>

现在,很明显,您不必对变量和文件位置做那么多操作。我只是使用了这么多变量来演示图像的来源和去向。

注意:`$thumbnail->thumbnailImage(100,null);` 通过将第二个参数设置为 null 来保持纵横比。请参阅 Imagick::thumbnailImage 阅读相关内容。

如果您希望裁剪图像而不是使用整个图像,还有另一种创建缩略图的方法。请查看 Imagick::cropThumbnailImage
-53
匿名
12 年前
JPEG 压缩质量的默认值似乎是 86。
To Top