PHP Conference Japan 2024

Imagick::setCompressionQuality

(PECL imagick 2, PECL imagick 3)

Imagick::setCompressionQuality设置对象的默认压缩质量

描述

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

设置对象的默认压缩质量。

注意

此方法仅适用于新图像,例如通过Imagick::newPseudoImage创建的图像。对于现有图像,应使用Imagick::setImageCompressionQuality()

参数

quality

一个介于1到100之间的int,1表示高压缩,100表示低压缩。

返回值

成功时返回true

示例

示例 #1 Imagick::setCompressionQuality()

<?php
function setCompressionQuality($imagePath, $quality) {

$backgroundImagick = new \Imagick(realpath($imagePath));
$imagick = new \Imagick();
$imagick->setCompressionQuality($quality);
$imagick->newPseudoImage(
$backgroundImagick->getImageWidth(),
$backgroundImagick->getImageHeight(),
'canvas:white'
);

$imagick->compositeImage(
$backgroundImagick,
\Imagick::COMPOSITE_ATOP,
0,
0
);

$imagick->setFormat("jpg");
header("Content-Type: image/jpg");
echo
$imagick->getImageBlob();
}

?>

添加笔记

用户贡献笔记 3条笔记

deeps chennai
14年前
给那些无法使用此功能的人的一条提示..

使用PHP 5.1.6,以下代码有效

<?php
$img
->setCompression(Imagick::COMPRESSION_JPEG);
$img->setCompressionQuality(80);
?>

但是,在更高版本的PHP中(我在PHP 5.2.10上进行了尝试),代码无效(并且Imagick也没有抛出任何异常或警告)。

有效的代码是

<?php
$img
->setImageCompression(Imagick::COMPRESSION_JPEG);
$img->setImageCompressionQuality(80);
?>

并且此代码向后兼容(适用于PHP 5.1.6和5.2.10)
charles dot hall at sas dot com
14年前
我必须插入一个对“stripImage()”的调用才能真正看到文件大小缩小。

<?php
$img
= new Imagick();
$img->readImage($src);
$img->setImageCompression(imagick::COMPRESSION_JPEG);
$img->setImageCompressionQuality(90);
$img->stripImage();
$img->writeImage($dest);
?>
nVaux.com
16年前
Sebastian 的示例运行良好,只有一个小的拼写错误,否则会报错。

<?php
$img
->setCompression(Imagick::COMPRESSION_JPEG);
$img->setCompressionQuality(80);
?>

我使用了Sebastian的示例,并制作了一个压缩目录中所有图像的示例

<?php
$images
= new Imagick(glob('images/*.jpg'));

foreach(
$images as $image)
{
// 压缩方法,请参阅Imagick的“常量”页面
$image->setCompression(imagick::COMPRESSION_JPEG);
// 1到100之间的值,1表示高压缩,100表示低压缩
$image->setCompressionQuality(80);
$image->writeImage();
}

?>
To Top