Слияние нескольких прозрачных изображений PNG с php - PullRequest
2 голосов
/ 03 января 2011

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

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

Это моя первая работа с изображениями с использованием 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);

ОБНОВЛЕНИЕ: Это мой текущий исходный код

$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);

Ответы [ 2 ]

2 голосов
/ 05 апреля 2013

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

//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');
0 голосов
/ 03 января 2011

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

Информация: "Вы должны отключить alphablending (imagealphablending ($ im, false)), чтобы использовать его."

...