PHP Imagick 使用负偏移裁剪图像并保持负值 space
PHP Imagick crop image with negative offset and keep negative space
我正在使用 php Imagick::cropImage,但遇到了一些问题。
假设我有这张图片:
我想用这个裁剪区域裁剪图像:
这是我正在使用的 PHP 代码:
$width = 200;
$height = 200;
$x = -100;
$y = -50;
$image = new Imagick();
$image->readImage($path_to_image);
$image->cropImage( $width, $height, $x, $y );
$image->writeImage($path_to_image);
$image->clear();
$image->destroy();
结果是一张 50px x 150px 的图片(这不是我想要的):
我想要的是一张 200px x 200px 的图像,其余部分用 alpha 填充(方格图案说明透明像素):
如何填充那些空白像素?
裁剪后使用 Imagick::extentImage 将图像放大到预期的图像大小。通过设置背景颜色或根据需要进行泛光填充,可以轻松填充 "empty" 像素。
$width = 100;
$height = 100;
$x = -50;
$y = -25;
$image = new Imagick();
$image->readImage('rose:');
$image->cropImage( $width, $height, $x, $y );
$image->extentImage( $width, $height, $x, $y );
用背景填充空白像素
$image = new Imagick();
$image->readImage('rose:');
$image->setImageBackgroundColor('orange');
$image->cropImage( $width, $height, $x, $y );
$image->extentImage( $width, $height, $x, $y );
或 ImagickDraw
$image = new Imagick();
$image->readImage('rose:');
$image->cropImage( $width, $height, $x, $y );
$image->extentImage( $width, $height, $x, $y );
$draw = new ImagickDraw();
$draw->setFillColor('lime');
$draw->color(0, 0, Imagick::PAINT_FLOODFILL);
$image->drawImage($draw);
编辑
要设置透明空像素,在背景色之前设置遮罩
$image->setImageMatte(true);
$image->setImageBackgroundColor('transparent');
我正在使用 php Imagick::cropImage,但遇到了一些问题。
假设我有这张图片:
我想用这个裁剪区域裁剪图像:
这是我正在使用的 PHP 代码:
$width = 200;
$height = 200;
$x = -100;
$y = -50;
$image = new Imagick();
$image->readImage($path_to_image);
$image->cropImage( $width, $height, $x, $y );
$image->writeImage($path_to_image);
$image->clear();
$image->destroy();
结果是一张 50px x 150px 的图片(这不是我想要的):
我想要的是一张 200px x 200px 的图像,其余部分用 alpha 填充(方格图案说明透明像素):
如何填充那些空白像素?
裁剪后使用 Imagick::extentImage 将图像放大到预期的图像大小。通过设置背景颜色或根据需要进行泛光填充,可以轻松填充 "empty" 像素。
$width = 100;
$height = 100;
$x = -50;
$y = -25;
$image = new Imagick();
$image->readImage('rose:');
$image->cropImage( $width, $height, $x, $y );
$image->extentImage( $width, $height, $x, $y );
用背景填充空白像素
$image = new Imagick();
$image->readImage('rose:');
$image->setImageBackgroundColor('orange');
$image->cropImage( $width, $height, $x, $y );
$image->extentImage( $width, $height, $x, $y );
或 ImagickDraw
$image = new Imagick();
$image->readImage('rose:');
$image->cropImage( $width, $height, $x, $y );
$image->extentImage( $width, $height, $x, $y );
$draw = new ImagickDraw();
$draw->setFillColor('lime');
$draw->color(0, 0, Imagick::PAINT_FLOODFILL);
$image->drawImage($draw);
编辑
要设置透明空像素,在背景色之前设置遮罩
$image->setImageMatte(true);
$image->setImageBackgroundColor('transparent');