2013-03-08 14 views
6

Ho le ultime ore cercato di ottenere un logo PNG con uno sfondo trasparente su uno sfondo JPG. Ho provato diversi modi e con diversi globals, ma non riesco a ottenere il risultato che voglio.Overlay PNG su JPG con Imagick

"primo tentativo":

$overlay = new Imagick('overlay.png'); 
$image = new Imagick('background.jpg'); 

$image->compositeImage($overlay, Imagick::COMPOSITE_DEFAULT, 10, 10); 
$image->writeImage('background.jpg'); //replace original background 

$overlay->destroy(); 
$image->destroy(); 

enter image description here

Come si può vedere, il logo Jaguar è ​​tutto nero.


"secondo tentativo"

$overlay = new Imagick('overlay.png'); 
$image = new Imagick('background.jpg'); 

$image->setImageColorspace($overlay->getImageColorspace()); 
$image->compositeImage($overlay, Imagick::COMPOSITE_DEFAULT, 10, 10); 
$image->writeImage('background.jpg'); //replace original background 

$overlay->destroy(); 
$image->destroy(); 

enter image description here

Questo il logo Jaguar sembra che dovrebbe, ma lo sfondo è tutto incasinato ora.


ho provato con Imagick::setImageMatte e ha cercato di aggiungere il overlay to a white background (pensato che ha bisogno di avere uno sfondo trasparente) e ancora non visualizzerà l'immagine in modo corretto. Ho provato molte altre varianti dei 2 frammenti sopra, ma sembrano tutti rendere il PNG completamente o parzialmente nero.

Cosa mi manca o cosa non funziona? Qualcuno può darmi una spinta nella giusta direzione? Si prega di notare che questo deve essere fatto in PHP.

Grazie mille!

risposta

10

Sono un enorme idiota! È venuto fuori che mi sono dimenticato di convertire le immagini da CMYK a RGB. Per chiunque possa incontrarlo in futuro, impara dalla mia incompetenza!

2

Stavo cercando di sovrapporre un png con trasparenza sopra a un altro png. Ho usato questa linea da the PHP docs.

$src1->compositeImage($src2, Imagick::COMPOSITE_MATHEMATICS, 0, 0); 

ma stavo ottenendo lo stesso problema. L'overlay è venuto solo come nero. Cambiarlo a questo sembrava risolvere i colori.

$src1->compositeImage($src2, Imagick::COMPOSITE_DEFAULT, 0, 0);