PHP Conference Japan 2024

Imagick::trimImage

(PECL imagick 2, PECL imagick 3)

Imagick::trimImage移除影像邊緣

描述

public Imagick::trimImage(float $fuzz): bool

從影像中移除背景色的邊緣。如果 Imagick 是針對 ImageMagick 6.2.9 或更新版本編譯的,則此方法可用。

參數

fuzz

預設情況下,目標必須完全匹配特定的像素顏色。然而,在許多情況下,兩種顏色可能會有少量差異。影像的 fuzz 成員定義了多少容差可以接受將兩種顏色視為相同。此參數表示量子範圍的變化。

回傳值

成功時回傳 true

錯誤/例外

發生錯誤時拋出 ImagickException。

範例

範例 1 使用 Imagick::trimImage()

修剪影像,然後顯示在瀏覽器中。

<?php
/* 建立物件並讀取影像 */
$im = new Imagick("image.jpg");

/* 修剪影像。 */
$im->trimImage(0);

/* 輸出影像 */
header("Content-Type: image/" . $im->getImageFormat());
echo
$im;
?>

參見

新增筆記

使用者貢獻的筆記 4 筆筆記

15
dhp
15 年前
在更改影像裁剪的操作(例如 trimImage)之後,IM 會保留舊的畫布和定位資訊。如果您需要在新尺寸的基礎上對影像執行其他操作,則需要使用 setImagePage 重設此資訊。這相當於 +repage 命令列引數。

<?php
$im
->trimImage(0);
$im->setImagePage(0, 0, 0, 0);
?>
8
Kirsty Forrester
11 年前
修剪命令可以回傳資訊,告訴您影像裁剪的位置座標和修剪後影像的新尺寸。我找不到如何使用此類別執行此操作的範例,所以這是我執行此操作的方式

<?php

// 建立和修剪影像
$image = new Imagick('image.png');
$image->trimImage(0.3);

/**
* Imagick::getImagePage() 會為我們提供一個陣列,其中包含修剪後影像的寬度、高度、x 和 y 座標
* 但是,寬度和高度是原始影像的
*/
$imagePage = $image->getImagePage();
list(
$x, $y) = array($imagePage['x'], $imagePage['y']);

// 因此,我們需要重設影像頁面才能取得修剪後影像的正確高度和寬度
$image->setImagePage(0, 0, 0, 0);
list(
$width, $height) = array($image->width, $image->height);

?>

這會留下兩個變數,分別表示修剪後影像的寬度和高度,以及兩個變數,分別表示修剪區域相對於原始影像的 x 座標和 y 座標。

當您修剪的影像是兩個影像之間的差異時(例如,來自 Imagick::compareImages()),而且您想要將原始影像裁剪為與差異相同的大小和位置時,此資訊非常有用。
1
tamucola
3 年前
fuzz 需要 getQuantum
/**
* @param string $imagePath
* @param float $fuzz 0.1=10%
* @return bool
* @throws ImagickException
*/
public static function trimImage($imagePath, $fuzz = 0.1)
{
if (empty($imagePath)) {
return false;
}
$imagePath = realpath($imagePath);
if (!is_file($imagePath)) {
return false;
}
if (!class_exists('Imagick')) {
return false;
}
$im = new Imagick($imagePath);
$result = $im->trimImage($fuzz * $im::getQuantum());
if (!$result) {
return false;
}

return $im->writeImage($imagePath);
}
0
Mark van der Velden
16 年前
此方法需要 ImageMagick 版本 >= 6.2.8
To Top