2016-10-07 7 views
2

Я успешно объединил png-изображение в jpeg-фон, используя библиотеку php GD, однако я бы хотел, чтобы изображение png имело прозрачный фон, но белый фон постоянно отображается как показано ниже:php merge transparent png image to jpeg, предотвращающий белый фон

enter image description here

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

Вот мой код:

<?php 
     $background = imagecreatefromjpeg('img3.jpg'); 
     $bird = imagecreatefrompng('img4.png'); 
     $bird_x = imagesx($bird); 
     $bird_y = imagesy($bird); 

     imagesavealpha($bird, true); 
     $color = imagecolorallocatealpha($bird, 0, 0, 0, 127); 
     imagefill($bird, 0, 0, $color); 
    if (imagecopymerge($background, $bird, 0, 0, 0, 0, $bird_x, $bird_y, 100)) 
     { 
      header('Content-Type: image/jpeg'); 
      imagejpeg($background); 
      imagedestroy($bird); 
     } 
     else 
      { 
       header('Content-Type: text/html'); 
       echo "Failed to Merge images!"; 
      } 
    ?> 
+1

Добавить некоторые примеры кода здесь – Elby

ответ

1

Использование imagecopy

imagecopy($dest_image, $src, ($offset + 250), $offset, 0, 0, imagesx($src),imagesy($src)); 
+0

Это, как я реализовал imagecopy 'imagecopy ($ фон, $ птичку, 0, 0, 0, 0, imagesx ($ птица), imagesy ($ bird)) 'и он работает, однако, когда я меняю координаты птицы, появляется черный ящик ... предложение о том, как предотвратить это? – Murkdid

+0

@Murkdid может быть изображением птицы меньше, чем по новым координатам – Elby

0

Я предполагаю, что указанное поведение является.

imagecopymerge объединяет N% пикселей исходного изображения с (100-N)% пикселей от целевого изображения. Из этого определения было бы логично предположить, что вы не увидите ни одного пикселя фонового изображения в области, где вы скопировали птицу (которая является полным прямоугольником). Отсюда белые пиксели вместо альфа.

Попробуйте imagecopy или imagecopyresampled (example) без изменения размера.