2013-03-08 15 views
6

Ich habe die letzten paar Stunden versucht, ein PNG-Logo mit einem transparenten Hintergrund oben auf einem JPG-Hintergrund zu bekommen. Ich habe mehrere Wege und mit mehreren Globals auch versucht, aber ich bin nicht in der Lage, das gewünschte Ergebnis zu bekommen.Overlay PNG auf JPG mit Imagick

"erster Versuch":

$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

Wie Sie sehen können, das Jaguar-Logo ist alles schwarz.


"Second Attempt"

$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

Dieser Jaguar Logo, um es aussieht sollte, aber der Hintergrund ist jetzt alles durcheinander.


ich versucht habe, mit Imagick::setImageMatte und versuchte, die overlay to a white background hinzufügen (dachte ich einen transparenten Hintergrund haben muss) und immer noch wird es nicht das Bild korrekt angezeigt werden. Ich habe viele andere Variationen der 2 obigen Schnipsel ausprobiert, aber sie scheinen alle das PNG vollständig oder teilweise schwarz zu machen.

Was vermisse ich oder mache ich falsch? Kann mich jemand in die richtige Richtung stoßen? Bitte beachten Sie, dass dies in PHP erfolgen muss.

Vielen Dank!

Antwort

10

Ich bin ein riesiger Idiot! Stellt sich heraus, ich habe vergessen, die Bilder von CMYK in RGB zu konvertieren. Für alle, die in Zukunft auf dieses Problem stoßen könnten, lerne von meiner Inkompetenz!

2

Ich habe versucht, ein PNG mit Transparenz über die Oberseite eines anderen PNG zu überlagern. Ich habe diese Zeile von the PHP docs verwendet.

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

aber ich bekam das gleiche Problem. Die Überlagerung kam nur als schwarz durch. Es zu ändern, schien die Farben zu fixieren.

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