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 筆筆記

2
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(); 移除更多檔案大小。
1
nulll
11 個月前
在 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
6 年前
對於 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
To Top