2013-03-29 3 views
0

Это дует мне в голову. Я хочу объединить 2 прозрачных PNG.GD2 - Копирование двух прозрачных изображений на черный фон

Первый - это круг ($ source), созданный на лету с квадратного изображения. Второй - это маркер карты ($ marker) с прозрачным кругом, который соответствует первому.

imagepng ($ source); и imagepng ($ marker); выводится так, как можно было бы ожидать. С прозрачным фоном.

Я затем создать пустой прозрачное изображение размером маркера, чтобы поместить их обоих вместе:

//NEW BLANK TRANSPARENT IMAGE 
$dest = imagecreatetruecolor(50, 61); 
$transparent = imagecolorallocatealpha($dest, 0, 0, 0, 127); 
imagefill($dest, 0, 0, $transparent); 
imagealphablending($dest, true); 
imagesavealpha($dest,true); 

//COPY THE CIRCLE  
imagecopy($dest, $source, 5, 5, 0, 0, 41, 41); 

//AND THE MARKER ON TOP 
imagecopy($dest, $marker, 0, 0, 0, 0, 50, 61); 

В результате круг выглядит как черный квадрат с кругом внутри. Я пробовал много комбинаций imagealphablending и imagesavealpha как на $ source, так и на $ dest, и ничего не работает.

Как удалить черный квадрат и оставить прозрачный источник $ в результате, как и до слияния?

+0

Я просто попробовал свой код с 2 прозрачными изображениями, и это сработало для меня. Пробовал с помощью imagecolortransparent ($ dest, $ blackColor); '? – Uby

+0

Просто сделал это. Даже если он мог столкнуться с другими чернокожими на картинке. Все еще не сработало. – Bruno

+0

Проблема здесь в маске круга. Он отлично работает на своем, но при копировании на другое изображение он добавляет к нему черный фон. – Bruno

ответ

0

Проблема была:

Чтобы создать круг на лету, я создавал круглую маску и сделать все остальное прозрачным, что делает его красным, а затем сделать красный прозрачный. Это несовместимо с imagesavealpha (true), поскольку он говорит, что gd-движок точно игнорирует прозрачные цвета и вместо этого сохраняет весь альфа-канал.

При объединении обоих изображений цвет, когда-то прозрачный, теперь черный.

Решение моего дела состояло в том, чтобы проанализировать его пиксель на пиксель и скопировать его на пустое изображение, если оно находится внутри круга, используя круговое уравнение.

Смежные вопросы