У меня следующая проблема.
У меня есть файл PNG (http://meteopage.com/beta/image.png), который уже частично прозрачен, и я хотел бы сделать «розовую» рамку также прозрачной.
Я прочитал некоторые инструкции здесь и придумал код, который заменяет границу прозрачной точкой, но все остальное, которое уже было прозрачным, превращается в черный: http://meteopage.com/beta/radar2.php
Мой код выглядит так:
<?php
$file="image.png";
$im = imagecreatefrompng($file);
imagealphablending($im, false);
$new = imagecolorclosest($im, 255, 0, 255);
imagecolortransparent($im, $new);
imagesavealpha($im, true);header('Content-type: image/png');
imagepng($im);?>
Я попытался добавить эти команды imagesavealpha и imagealphablending, но все равно не повезло, он черный, как вы можете видеть в прикрепленной ссылке. Кто-нибудь знает, как сохранить оригинальную прозрачность и просто «добавить» эти розовые пиксели к ней?
Ваше изображение основано на палитре, а не на истинном цвете, поэтому imagealphablending()
а также imagesavealpha()
не нужны
Самый простой способ сделать это — заменить розовый цвет в индексе палитры прозрачным, например, так:
$file = 'image.png';
$im = imagecreatefrompng($file);
$new = imagecolorclosest($im, 255, 0, 255);
imagecolorset($im, $new, 255, 0, 255, 127);
header('Content-type: image/png');
imagepng($im);
Обратите внимание, что для этого требуется PHP> = 5.4 в противном случае imagecolorset()
не примет alpha
параметр.
Других решений пока нет …