PHP Conference Japan 2024

Imagick::cropImage

(PECL imagick 2, PECL imagick 3)

Imagick::cropImage擷取影像的區域

描述

public Imagick::cropImage(
    int $width,
    int $height,
    int $x,
    int $y
): bool

擷取影像的區域。

參數

width

裁切的寬度

height

裁切的高度

x

裁切區域左上角的 X 座標

y

裁切區域左上角的 Y 座標

傳回值

成功時傳回 true

錯誤/例外

發生錯誤時拋出 ImagickException。

範例

範例 1 Imagick::cropImage()

<?php
function cropImage($imagePath, $startX, $startY, $width, $height) {
$imagick = new \Imagick(realpath($imagePath));
$imagick->cropImage($width, $height, $startX, $startY);
header("Content-Type: image/jpg");
echo
$imagick->getImageBlob();
}

?>

新增註解

使用者貢獻註解 4 則註解

17
Christian Dehning
14 年前
當裁切 gif 影像時(我用 jpg 和 png 影像沒有問題),畫布不會被移除。請在裁切的 gif 上執行以下命令,以移除空白空間

$im->setImagePage(0, 0, 0, 0);
5
olav at schettler dot net
8 年前
這是一個簡單的函式,用於建立縮圖。它接受一個額外的參數,以設定產生的縮圖的焦點

<?php
function thumbnail($image, $new_w, $new_h, $focus = 'center')
{
$w = $image->getImageWidth();
$h = $image->getImageHeight();

if (
$w > $h) {
$resize_w = $w * $new_h / $h;
$resize_h = $new_h;
}
else {
$resize_w = $new_w;
$resize_h = $h * $new_w / $w;
}
$image->resizeImage($resize_w, $resize_h, Imagick::FILTER_LANCZOS, 0.9);

switch (
$focus) {
case
'northwest':
$image->cropImage($new_w, $new_h, 0, 0);
break;

case
'center':
$image->cropImage($new_w, $new_h, ($resize_w - $new_w) / 2, ($resize_h - $new_h) / 2);
break;

case
'northeast':
$image->cropImage($new_w, $new_h, $resize_w - $new_w, 0);
break;

case
'southwest':
$image->cropImage($new_w, $new_h, 0, $resize_h - $new_h);
break;

case
'southeast':
$image->cropImage($new_w, $new_h, $resize_w - $new_w, $resize_h - $new_h);
break;
}
}
?>
5
ElPadre
14 年前
實際上,如果計畫對裁切後的影像進行任何涉及定位和/或重力的變更,Imagick::setImagePage(0,0,0,0) 也適用於 jpg 和 png(我建立了一個腳本,可一次完成裁切、臉部模糊和浮水印,並且花了很多時間才確定為什麼模糊和浮水印文字永遠不會出現...)。
-2
oxxido at gmail dot com
9 年前
我有一個函式,它會接收一張圖片,調整大小並裁剪,然後儲存為一般圖片,接著再次調整大小並裁剪以建立縮圖。第二次裁剪的數值差非常多,而且計算是完美的。問題在於第二次裁剪沒有重設 imagePage,所以如果你嘗試對同一張圖片裁剪兩次,最好先重設它。
<?php
$thumb
= new Imagick($file)
$thumb->resizeImage($r_w1,$r_h1,Imagick::FILTER_CATROM,0.9, false);
$thumb->cropImage($w1,$h1,$l1,$t1);
$thumb->writeImage($destinationPath.'/'.$fileName);

$thumb->resizeImage($r_w2,$r_h2,Imagick::FILTER_CATROM,0.9, false);
$thumb->setImagePage(0, 0, 0, 0);
$thumb->cropImage($w2,$h2,$l2,$t2);
$thumb->writeImage($destinationPath.'/'.$fileNameThumb);

?>

順帶一提,我需要完美的尺寸,所以我必須將 "bestfit" 設定為 false。
To Top