Imagick::clipPathImage()
(PECL imagick 2.0.0)
Clips along the named paths from the 8BIM profile
说明
Imagick::clipPathImage(string $pathname,bool $inside): bool
Clips along the named paths from the 8BIM profile, if present. Later operations take effect inside the path. It may be a number if preceded with #, to work on a numbered path, e.g.,"#1" to use the first path.
参数
- $pathname
The name of the path
- $inside
If
TRUE
later operations take effect inside clipping path. Otherwise later operations take effect outside clipping path.
返回值
成功时返回TRUE
。
错误/异常
错误时抛出 ImagickException。
I found Imagick::clipPathImage and Imagic::clipImage did not work as I had expected. I thought they would just clip the path and throw away the extra data and you are done. Not the case. Here is how I was able to use a clipping path: <?php $img = new Imagick("/Path/To/Test/Image.psd"); $geometry = $img->getImageGeometry(); // Uses the first path as the clipping path $img->clipPathImage("#1", false); // Fill the clipped part with a color $draw = new ImagickDraw(); $draw->setFillColor("#000000"); $draw->color(0,0, imagick::PAINT_RESET); $img->drawImage($draw); // Composite the clipped image with the old image. Set the color of the composite to any color you want to be the outside part. $composite = new Imagick($path); $composite->newImage( $geometry['width'], $geometry['height'], new ImagickPixel("white"), 'png'); $composite->compositeImage($img, imagick::COMPOSITE_COPY, 0, 0); ?> Then doing any resizing or creating thumbnails from the resulting image disregarded all the previous commands so I "saved" it and started with a new Imagick object <?php // Copy the image so clip is "saved" $clipped = new Imagick(); $clipped->readImageBlob($composite->getImageBlob()); ?> I'm sure there is a simpler way, but this took me awhile to get right and there were some hurdles to cross so I hope it is able to help someone on the way. This is all the convert equivalent of: $ 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