Pregunta

He tenido algunos problemas para generar una imagen con la extensión de Imagick PHP. Todo funciona bien, excepto que mi siguiente "montaje" tiene un fondo blanco y, por lo tanto, no puedo superponerlo encima de otra cosa. ¿Cómo puedo generar un montaje con un fondo 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);

¡¡Gracias!!

¿Fue útil?

Solución

Tuve el mismo problema y descubrí que la API C Magickwand, que impulsa Imagick), no es compatible con la opción para el montaje.

Terminé montándolo manualmente así:

// 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++);
}

Otros consejos

Sé que esta es una pregunta antigua, pero encontré otra forma de hacer esto usando la función MontageImage de Imagick. Después de crear su objeto Imagick, debe declarar el fondo como transparente como este:

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

Una vez establecido, puede ejecutar el objeto a través de MontageImage, lo que creará una MontageImage con un fondo transparente:

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

Luego puede agregar la nueva imagen de montaje a su imagen compuesta asegurándose de usar el compuesto compuesto compuesto predefinido compuesto_atop o sus constantes (s) deseadas como esta:

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

Simplemente me encontré con esta pregunta y decidió publicar otra solución en caso de que alguien más quiera otra forma de hacerlo sin un bucle manual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top