2011-12-23 2 views
1

Я хочу вырезать многоугольник (у меня есть прозрачная область) изображения, которое я сохранил из Google Maps Static API. Затем я создал второе изображение, сохранил его и попробовал также тот же скрипт, но с той разницей, что на втором запрошенном изображении не было эффекта/изменения, но это одно и то же изображение. Может быть, ошибка PHP? Я использую PHP 5.3.3.PHP GD: Полигон обрезки: работает с некоторыми изображениями, а некоторые не с

<?php 
$image = imagecreatefrompng('map.png'); 
$image2 = imagecreatefrompng('map2.png'); 


$black = imagecolorallocatealpha($image, 0, 0, 0, 127); 
$black2 = imagecolorallocatealpha($image2, 0, 0, 0, 127); 


imagefilledpolygon($image, array(0,0, 20,20, 0,20), 3, $black); 
imagefilledpolygon($image2, array(0,0, 20,20, 0,20), 3, $black2); 

header('Content-Type: image/png'); 
imagepng($image); 
#imagepng($image2); 
?> 

Изображение 1: 1

Изображение 2: 2

+0

С [учебное пособие] (http://www.php.net/manual/en/function.imagecolorallocatealpha.php) «* альфа *: значение от 0 до 127. 0 указывает на полностью непрозрачный, а 127 - полностью прозрачный ». Таким образом, вы рисуете полностью прозрачный полигон, и вы видите это через него? Похоже, он работает по назначению. –

+0

Он должен заменить этот полигон прозрачностью. Первые примеры также правильны, вот результат работы первого изображения: http://i.imgur.com/91Ska.png – Poru

+1

Рисование с прозрачным полигоном не заменяет область, которую вы рисуете, но композиция основного изображения с цветом многоугольника, в соответствии с альфа-значением. Если вы видите сплошной цвет с кодом, который вы указали выше, я предполагаю, что вы пишете изображение, на котором не включено смешение. Попробуйте вызвать 'imagealphablending ($ image, TRUE)' и 'imagealphablending ($ image2, TRUE)', и я уверен, вы обнаружите, что получите те же результаты. –

ответ

0

Я нашел решение: Вы должны установить imagealphablending и настройки imagesavealpha для изображений, чтобы получить эту прозрачность работает. Проблема также в том, что эти изображения имеют разные биты. Рабочие изображения имели 8 бит, а у неработающего - 24 бит.

imagealphablending($image2, false); 
imagesavealpha($image2, true); 

Этот комментарий помог мне много: http://www.php.net/manual/en/function.imagecreatefrompng.php#47083