PHP Australia Conference 2015

Imagick::clipPathImage

(PECL imagick 2.0.0)

Imagick::clipPathImageSuit le chemin d'un profil 8BIM

Description

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

Suit le chemin d'un profil 8BIM, s'il est présent. Les opérations suivantes auront lieux dans ce chemin. Cela peut être un nombre, s'il est précédé par #, pour utiliser un chemin numéroté, e.g., "#1" pour utiliser le premier chemin.

Liste de paramètres

pathname

Le nom du chemin

inside

Si TRUE les prochaines opérations auront lieu dans le chemin. Sinon, les prochaines opérations auront lieux hors du chemin.

Valeurs de retour

Returns TRUE on success.

Erreurs / Exceptions

Lance une exception ImagickException si une erreur survient.

add a note add a note

User Contributed Notes 1 note

up
1
Coleman Nitroy
6 years ago
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
To Top