Pergunta

Estou tendo problemas para gerar uma imagem com a extensão PHP Imagick. Tudo funciona bem, exceto que o meu seguinte "montagem" tem um fundo branco e, portanto, não posso sobrepô -lo em cima de outra coisa. Como posso gerar uma montagem com um fundo transparente?

       $Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");
      $Canvas->compositeImage($Montage, $Montage->getImageCompose(), 5, 5);

Obrigado!!

Foi útil?

Solução

Eu tive o mesmo problema e descobri que a API da Magickwand C, que alimenta Imagick), não suporta a opção de montagem.

Acabei montando -o manualmente assim:

// Add them to an array of Imagick objects, instead of using addImage().
$images = new Array();

// Make a transparent canvas.
$target = new Imagick();
$target->newImage($width, $height * count(images), 'none');

$i = 0;
foreach ($images as $image) {
    $target->compositeImage($image, imagick::COMPOSITE_COPY, 0, $height * $i++);
}

Outras dicas

Sei que essa é uma pergunta antiga, mas encontrei outra maneira de fazer isso usando a função MontageImage da Imagick. Depois de criar seu objeto Imagick, você deve declarar o fundo como transparente como este:

$Icons->setBackgroundColor( new ImagickPixel('transparent') );

Quando isso estiver definido, você poderá executar o objeto através do MontageImage, que criará um MoTageImage com um fundo transparente:

$Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");

Em seguida, você pode adicionar a nova imagem de montagem à sua imagem composta, certificando -se de usar o Imagick Composite composto predefinido Composite_atop ou as constantes desejadas (s) como esta:

$Canvas->compositeImage($Montage, imagick::COMPOSITE_ATOP, 5, 5);

Acabei de encontrar essa pergunta e decidiu postar outra solução, caso alguém queira outra maneira de fazer isso sem um loop manual.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top