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 个备注

Christian Dehning
14 年前
在裁剪 gif 图像时(我在 jpg 和 png 图像上没有遇到问题),画布不会被删除。请在裁剪后的 gif 上运行以下命令,以删除空白区域

$im->setImagePage(0, 0, 0, 0);
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;
}
}
?>
ElPadre
13 年前
实际上,Imagick::setImagePage(0,0,0,0) 在 jpg 和 png 上也很有用,如果你打算对裁剪后的图像进行更多涉及定位和/或重力的更改(我创建了一个脚本来进行裁剪、面部模糊和水印,并且花了很长时间才确定为什么模糊和水印文本没有显示出来...)。
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);

?>

顺便说一句,我需要完美的尺寸,所以我不得不将“最佳拟合”设置为 false。
To Top