ConFoo 2025

Imagick::clipPathImage

(PECL imagick 2, PECL imagick 3)

Imagick::clipPathImageRecorta ao longo dos caminhos nomeados do perfil 8BIM

Descrição

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

Recorta ao longo dos caminhos nomeados do perfil 8BIM, se presente. As operações posteriores entram em vigor dentro do caminho. Pode ser um número se precedido de #, para trabalhar em um caminho numerado, por exemplo, "#1" para usar o primeiro caminho.

Parâmetros

pathname

O nome do caminho

inside

Se true as operações posteriores têm efeito dentro do caminho de recorte. Caso contrário, as operações posteriores terão efeito fora do caminho de recorte.

Valor Retornado

Retorna true em caso de sucesso.

Erros/Exceções

Lança uma exceção ImagickException em caso de erro.

adicione uma nota

Notas Enviadas por Usuários (em inglês) 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