2011-01-03 2 views
2

У меня возникла небольшая проблема слияния нескольких прозрачных pngs друг на друга. Я пытаюсь создать инструмент, который разрабатывает ремень на экране для пользователя, позволяя им выбирать ремень, пряжку и дизайн.Слияние нескольких прозрачных изображений PNG с php

Инструмент объединит три разных изображения в один, чтобы создать одно изображение предварительного просмотра. Когда я запускаю код ниже, он создает изображение на ремне, правильно добавляет пряжку, но на правой стороне ремешка появляется черный ящик, выглядящий примерно того же размера, что и изображение с пряжкой. I не может понять, в чем проблема.

Это моя первая работа с изображениями, использующими php, поэтому я могу пропустить очевидное. если кто-нибудь может мне помочь, я был бы очень благодарен. заранее спасибо!

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: Это мой текущий исходный код

$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

Возможный дубликат http://stackoverflow.com/questions/1394061/how-to-merge-transparent-png-with- изображения с помощью-PHP. – Jon

+0

Другой вопрос не касается той же проблемы, с которой я сталкиваюсь. – Jesse

ответ

0

Я думаю, вы должны использовать imagesavealpha(): http://www.php.net/manual/en/function.imagesavealpha.php

Info: «Вы должны быть сброшена альфасмешивание (imagealphablending ($ im, false)), чтобы использовать его. "

+0

Я добавил imagealphablending ($ buckle, false); imagesavealpha ($ buckle, false); но все еще не работает, как я надеялся. – Jesse

+0

На самом деле вам нужно установить imagesavealpha ($ buckle, true); то же, что и $ crease и $ strap – Floern

+0

Я установил imagesavealpha ($ buckle, true); и imagealphablending ($ buckle, false); сгибаться тоже. Для ремешка у меня есть imagealphablending ($ strap, true) ;. Если я перейду на фальшивый, ремень вообще не появится. У меня все еще есть этот странный черный ящик. http://www.clarityproductions.com/bd/image2.php?buckle=buckle2. Есть идеи? – Jesse

2

Попробуйте этот код, и посмотреть, если он работает:

//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'); 
Смежные вопросы