2011-01-03 8 views
2

Ich habe ein kleines Problem, mehrere transparente PNGs übereinander zu verschmelzen. Ich versuche, ein Werkzeug zu erstellen, das einen Gürtel auf dem Bildschirm für den Benutzer erstellt, so dass sie einen Gurt, Schnalle und Design-Falte auswählen können.Mischen von mehreren transparenten PNG-Bildern mit PHP

Das Werkzeug führt drei verschiedene Bilder zu einem zusammen, um ein Vorschaubild zu erstellen. Wenn ich den unten stehenden Code ausführe, wird das Armbandbild erstellt, die Schnalle wird korrekt hinzugefügt, aber auf der rechten Seite des Armbandbildes wird eine schwarze Box angezeigt, die ungefähr die gleiche Größe wie das Schnallenbild aufweist. I kann nicht herausfinden, was das Problem ist.

Dies ist meine erste Arbeit mit Bildern mit PHP, so kann ich das Offensichtliche fehlen. Wenn mir jemand helfen kann, wäre ich sehr dankbar. Danke im Voraus!

header('Content-type: image/png'); 
$strap = imagecreatefrompng("images/straps/DBR.png"); 
$w = imagesx($strap); 
$h = imagesy($strap); 

imagealphablending($strap,true); 

$buckle = imagecreatefrompng("images/buckles/" . $buckle . ".png"); 
imagealphablending($buckle,true); 

$crease = imagecreatefrompng("images/skull.png"); 
imagealphablending($crease,true); 


imagecopy($strap,$buckle,200,0,0,0,$w,$h); 
imagecopy($strap,$crease,0,0,0,0,$w,$h); 

//imagecopy($photo2,$crease,200,0,0,0,$w,$h); 
// fill the image background with white 

imagepng($strap); 

imagedestroy($strap); 
imagedestroy($buckle); 

UPDATE: Dies ist mein aktueller Quellcode

$strap = imagecreatefrompng("images/straps/DBR.png"); 
$w = imagesx($strap); 
$h = imagesy($strap); 

imagealphablending($strap,true); 
imagesavealpha($strap, true); 


$buckle = imagecreatefrompng("images/buckles/" . $buckle . ".png"); 

imagealphablending($buckle,false); 
imagesavealpha($buckle, true); 

$crease = imagecreatefrompng("images/skull.png"); 

imagealphablending($crease,false); 
imagesavealpha($crease, true); 

imagecopy($strap,$buckle,200,0,0,0,$w,$h); 
imagecopy($strap,$crease,0,0,0,0,$w,$h); 

imagepng($strap); 

imagedestroy($strap); 
imagedestroy($buckle); 
+0

Mögliche Duplikat http://stackoverflow.com/questions/1394061/how-to-merge-transparent-png-with- Bild-Verwendung-PHP. – Jon

+0

die andere Frage adressiert nicht das gleiche Problem, das ich habe, das ich sehen könnte. – Jesse

Antwort

0

Ich glaube, Sie imagesavealpha verwenden(): http://www.php.net/manual/en/function.imagesavealpha.php

Info: „Sie müssen nicht gesetzt Alphablending (imagealpblending ($ im, false)), um es zu benutzen. "

+0

Ich habe imagealpblending hinzugefügt ($ Schnalle, falsch); imagesavealpha ($ Schnalle, falsch); aber immer noch nicht so wie ich es mir erhofft hatte. – Jesse

+0

Eigentlich muss man imagesavealpha setzen ($ buckle, true); gleich $ Crease und $ Strap – Floern

+0

Ich habe imagesavealpha gesetzt ($ Schnalle, wahr); und imagealpblending ($ Schnalle, falsch); falten auch. Für den Gurt habe ich imagealpblending ($ strap, true) ;. Wenn ich zu falsch ändere, zeigt das Band überhaupt nicht. Ich habe noch diese komische schwarze Box, die sich jedoch zeigt. http://www.clarityproductions.com/bd/image2.php?buckle=buckle2. Irgendwelche Ideen? – Jesse

2

Versuchen Sie den Code aus, und sehen, ob es funktioniert:

//call path of all images 
    //example: $peinado="/images/path/peinado.png"; 
    $image_1 = imagecreatefrompng($peinado); 
    $image_2 = imagecreatefrompng($cejas); 
    $image_3 = imagecreatefrompng($ojos); 
    $image_4 = imagecreatefrompng($nariz); 
    $image_5 = imagecreatefrompng($boca); 

    //the frame of the original image 
    $imgFinal = imagecreatefrompng($src); 

    //alpha & transparency 
    imagealphablending($imgFinal, true); 
    imagesavealpha($imgFinal, true); 

    //merge all images 
    imagecopy($imgFinal, $image_1, 0, 0, 0, 0, 259, 429); 
    imagecopy($imgFinal, $image_2, 0, 0, 0, 0, 259, 429); 
    imagecopy($imgFinal, $image_3, 0, 0, 0, 0, 259, 429); 
    imagecopy($imgFinal, $image_4, 0, 0, 0, 0, 259, 429); 
    imagecopy($imgFinal, $image_5, 0, 0, 0, 0, 259, 429); 

    //save the png image 
    imagepng($imgFinal, 'avatars/prueba.png'); 
Verwandte Themen