PHP Velho Oeste 2024

Imagick::clipPathImage

(PECL imagick 2, PECL imagick 3)

Imagick::clipPathImage8BIM profili boyunca isimli yolları kırpar

Açıklama

public Imagick::clipPathImage(string $yol_adı, bool $içinde): bool

Varsa, 8BIM profili boyunca isimli yolları kırpar. Sonraki işlemler yolun içinde etkili olur. Bir # ile öncelenmişse numaralı bir yol üzerinde işlem yapılır; ilk yol için #1 gibi.

Bağımsız Değişkenler

yol_adı

Yolun ismi.

içinde

true ise sonraki işlemler yolun içinde etkili olur. false ise sonraki işlemler yolun dışında etkili olur.

Dönen Değerler

Başarı durumunda true döner.

Hatalar/İstisnalar

Hata durumunda bir ImagickException istisnası oluşur.

add a note add a note

User Contributed Notes 1 note

up
1
Coleman Nitroy
16 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