2016-03-21 6 views
1

Ich habe zwei Grafikdateien.Wie füge ich zwei Grafikdateien zusammen? (PHP, Imagick)

Das erste Bild - ein Bild Hintergrund im JPG-Format

Die zweite Datei - PNG-Datei mit der Figur in dem mit weißen gefüllt Zentrum, mit einem schwarzen Rande auf einem Pfad. Der Haupthintergrund der transparenten PNG-Datei.

Frage: Wie zwei Dateien mit Transparenz zusammenführen (siehe Bild Beispiel)? Der Hintergrund der ersten Datei sollte innerhalb der Figur in der zweiten Datei platziert werden.

Scheme:

example images

Bilder:

PNG-Datei - profiles.in.ua/tmp/sample2.jpg

JPG-Datei - profiles.in.ua/tmp/sample1.png

PHP

$mask = new Imagick(realpath('mask.png')); 
$pattern = new Imagick(realpath('pattern.jpg')); 
$pattern->resizeImage($mask->width, $mask->height, Imagick::FILTER_LANCZOS, 1); 
$pattern->compositeImage($mask, Imagick::COMPOSITE_ATOP, 0, 0); 
header("Content-Type: image/png"); 
echo $pattern->getImageBlob(); 
$mask->destroy(); 
$pattern->destroy(); 
+0

Sie Administrator spaces.ru? Sie können Tag Code für Ihren Code Snipet verwenden? – Naumov

Antwort

2

das Maskenbildes Unter der Annahme erfolgt immer ausschließlich aus weißen Pixeln, schwarzen Pixel (die mit dem Muster überschrieben werden sollen) (der das Muster überschreiben soll) und transparenten Pixel (welche sollten bleiben transparent), können Sie diesen Effekt erzielen, indem Sie das Muster in die nicht transparenten Pixel in der Maske einpassen und das Ergebnis dann mit der Maske verdunkeln.

Die von Ihnen angegebene PNG-Datei hatte keinen transparenten Hintergrund wie angegeben. stattdessen war es weiß und grau schlüpfend. Ich musste es zuerst bearbeiten, um einen transparenten Hintergrund hinzuzufügen, bevor dieser Code funktionierte.

$mask = new Imagick(realpath('sample1.png')); 
$pattern = new Imagick(realpath('sample2.jpg')); 
$pattern->resizeImage($mask->width, $mask->height, Imagick::FILTER_LANCZOS, 1); 

$image = clone($mask); 
$image->compositeImage($pattern, Imagick::COMPOSITE_IN, 0, 0); 
$image->compositeImage($mask, Imagick::COMPOSITE_DARKEN, 0, 0); 

header("Content-Type: image/png"); 
echo $image; 

$image->destroy(); 
$mask->destroy(); 
$pattern->destroy(); 
+0

Arbeiten! Ich danke dir sehr! Du hast wirklich geholfen! :) – Nikolay

0

Sie müssen das Ende Ihres Codes beheben. Alles gut bis zum Ende.

$base->writeImage('output.png'); 
header("Content-Type: image/png"); 
echo $base; 

mich Aktualisieren :)

+0

Arbeiten! Ich danke dir sehr! Du hast wirklich geholfen! :) – Nikolay

+0

Bitte Stimme hinzufügen! –