2013-03-08 13 views
6

mam ostatnie kilka godzin próbowali dostać logo PNG z przezroczystym tłem na szczycie JPG tle. Próbowałem na kilka sposobów, a także z kilku globali, ale wydaje mi się, że nie jestem w stanie osiągnąć pożądanego rezultatu.Nakładka PNG na JPG przy użyciu Imagick

"Pierwsza próba":

$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

Jak widać, logo Jaguar jest cały czarny.


"Druga próba"

$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

Ten logo Jaguar wygląda tak jak powinien, ale w tle jest wszystko pomieszane teraz.


Próbowałem z Imagick::setImageMatte i starał się dodać overlay to a white background (myślałem, nie trzeba mieć przezroczyste tło) i nadal nie będzie wyświetlać obraz prawidłowo. Próbowałem wielu innych odmian 2 powyższych fragmentów, ale wszystkie wydają się sprawiać, że PNG jest całkowicie lub częściowo czarny.

Czego mi brakuje lub robię źle? Czy ktoś może dać mi szturchnięcie we właściwym kierunku? Należy pamiętać, że należy to zrobić w PHP.

Dziękuję bardzo!

Odpowiedz

10

Jestem wielkim idiotą! Okazuje się, że zapomniałem przekonwertować obrazy z CMYK na RGB. Dla każdego, kto może spotkać to w przyszłości, ucz się na mojej niekompetencji!

2

starałem się nakładki PNG z przejrzystości na wierzchu innego png. Użyłem tej linii z the PHP docs.

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

, ale miałem ten sam problem. Nakładka była tylko czarna. Zmiana na to wydawało się naprawić kolory.

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