PHP Conference Japan 2024

Imagick::clipPathImage

(PECL imagick 2, PECL imagick 3)

Imagick::clipPathImage沿 8BIM 配置文件中的命名路径裁剪

描述

public Imagick::clipPathImage(string $pathname, bool $inside): bool

如果存在,则沿 8BIM 配置文件中的命名路径裁剪。后续操作在路径内部生效。如果以 # 开头,则它可以是数字,以处理编号路径,例如,“#1”表示使用第一个路径。

参数

pathname

路径名称

inside

如果为 true,则后续操作在裁剪路径内部生效。否则,后续操作在裁剪路径外部生效。

返回值

成功时返回 true

错误/异常

错误时抛出 ImagickException。

添加注释

用户贡献的注释 1 条注释

Coleman Nitroy
16 年前
我发现 Imagick::clipPathImage 和 Imagic::clipImage 的工作方式与我预期不符。我以为它们只会裁剪路径并丢弃多余的数据,然后就完成了。事实并非如此。

以下是我使用裁剪路径的方法

<?php
$img
= new Imagick("/Path/To/Test/Image.psd");
$geometry = $img->getImageGeometry();

// 使用第一个路径作为裁剪路径
$img->clipPathImage("#1", false);

// 用颜色填充裁剪的部分
$draw = new ImagickDraw();
$draw->setFillColor("#000000");
$draw->color(0,0, imagick::PAINT_RESET);
$img->drawImage($draw);

// 将裁剪后的图像与旧图像合成。将合成的颜色设置为所需的外部部分颜色。
$composite = new Imagick($path);
$composite->newImage( $geometry['width'], $geometry['height'], new ImagickPixel("white"), 'png');
$composite->compositeImage($img, imagick::COMPOSITE_COPY, 0, 0);
?>

然后,对生成的图像进行任何调整大小或创建缩略图的操作都会忽略所有先前的命令,因此我“保存”了它并从一个新的 Imagick 对象开始

<?php
// 复制图像以“保存”裁剪
$clipped = new Imagick();
$clipped->readImageBlob($composite->getImageBlob());
?>

我相信有更简单的方法,但这花了我一段时间才弄清楚,并且遇到了一些障碍,所以我希望它能够帮助正在路上的人。

这与 convert 的等效命令如下

$ convert Test.psd -fill white -colorspace rgb -draw "color 0 0 reset" -clip -colorspace rgb -draw "Image Copy 0,0 0,0 'Test.psd'" OutputFile.png
To Top