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 則註解

30
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 上均可運作)
5
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);
?>
-4
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