Estensione PHP Imagick - Aiuto del montaggio?
-
26-09-2019 - |
Domanda
Ho avuto qualche problema a generare un'immagine con l'estensione PHP Imagick. Tutto funziona bene, tranne il mio seguente "montaggio" ha uno sfondo bianco e quindi non posso sovrapponderlo sopra qualcos'altro. Come posso generare un montaggio con uno sfondo trasparente?
$Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");
$Canvas->compositeImage($Montage, $Montage->getImageCompose(), 5, 5);
Grazie!!
Soluzione
Ho avuto lo stesso problema e ho scoperto che l'API Magickwand C, che alimenta Imagick), non supporta l'opzione per il montaggio.
Ho finito per montare manualmente così:
// 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++);
}
Altri suggerimenti
So che questa è una vecchia domanda, ma ho trovato un altro modo per farlo usando la funzione MontageImage di Imagick. Dopo aver creato il tuo oggetto Imagick, devi dichiarare lo sfondo come trasparente in questo modo:
$Icons->setBackgroundColor( new ImagickPixel('transparent') );
Una volta impostato, è possibile eseguire l'oggetto tramite MontageImage che creerà un montaggio con uno sfondo trasparente:
$Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");
Quindi è possibile aggiungere la nuova immagine del montaggio all'immagine composita assicurando di utilizzare il composito composito Imagick predefinito o le costanti desiderate come questa:
$Canvas->compositeImage($Montage, imagick::COMPOSITE_ATOP, 5, 5);
Ho appena attraversato questa domanda e ha deciso di pubblicare un'altra soluzione nel caso in cui qualcun altro voglia un altro modo per farlo senza un ciclo manuale.