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