PHP — ImageCopyMerge многослойные изображения

Может ли кто-нибудь указать мне правильное направление в моем вопросе, пожалуйста? :)

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

Что-то вроде этого:

Исходное изображение:

исходное изображение

Целевое изображение:

целевое изображение

Желаемый результат:

желаемый результат

Вот что я пробовал до сих пор, но не работает:

$dest = Imagecreatefrompng('img/dest_bg.png');
$src  = Imagecreatefromjpeg('img/src.jpg');

Imagealphablending($dest, true);
Imagealphablending($src, true);
Imagesavealpha($dest, true);

Imagecopymerge($dest, $src, 200, 0, 0, 0, 400, 415, 100);

imagepng($dest......

Я пробовал наоборот, но прозрачная форма звезды кажется белой или коричневой с пикселями.


person Rozalia Penyak    schedule 20.02.2016    source источник
comment
вот изображение ожидаемого результата [3]: i.stack.imgur.com/Zj2Ze.jpg< /а>   -  person Rozalia Penyak    schedule 20.02.2016


Ответы (1)


Мне удалось сделать это с помощью этой функции imagecopymerge_alpha

вот код

   function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
    // creating a cut resource
    $cut = imagecreatetruecolor($src_w, $src_h);

    // copying relevant section from background to the cut resource
    imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);

    // copying relevant section from watermark to the cut resource
    imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);

    // insert cut resource to destination image
    imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct);
}

            $dest = Imagecreatefrompng('img/final_bg.png');
            $src2 = Imagecreatefromjpeg('uploads/picture.jpg');
            $src = Imagecreatefrompng('img/pink_bg.png');

            Imagealphablending($dest, true);
            Imagealphablending($src, true);
            Imagesavealpha($dest, true);


            Imagecopymerge($src, $src2, 310, 120, 0, 0, 200, 200, 100); // i have positioned a small picture on a color filled background in the middle because the final background, witch is a picture with a transparent shape in the middle 
            imagepng($src, 'uploads/temp.png');
            Imagedestroy($src2);
            Imagedestroy($src);
            $temp =  Imagecreatefrompng('uploads/temp.png');

            Imagealphablending($temp, false);
            Imagecopymerge_alpha($temp, $dest, 0, 0, 0, 0, 800, 420, 100); //merged the color filled background with the picture on it with the final background here..


            imagejpeg($temp, 'uploads/final_result.jpg');
            Imagedestroy($dest);
            Imagedestroy($temp);
person Rozalia Penyak    schedule 20.02.2016