PHP Conference Japan 2024

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();
}

?>

添加注释

用户贡献的注释 5条注释

dylan dot arnold at gmail dot com
12年前
尝试获得良好的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();去除更多文件大小。
nulll
11个月前
在php 8.1.25、ImageMagick 7.1.1-22上测试
`setImageCompressionQuality()` 对 `avif` 图像没有任何作用。
无论您设置什么值,结果图像的大小始终相同。
匿名
1年前
setImageCompressionQuality方法接受一个整数作为参数,表示所需的图像压缩质量,范围为0到100,其中0表示最低质量(最高压缩,最大有损),100表示最高质量(最低压缩,无损)。

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

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

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

但我发现了一种有效的方法,那就是使用`setOption('png:compression-level', 9)`,其值范围为0-9。
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
To Top