Во-первых, я не мог заставить это работать, используя imagetruecolortopalette
.Не совсем уверен, если вы можете использовать функцию imagefill
в вашем случае (вам нужно знать, где начать заливку, и она работает, если у вас есть одна область белого цвета), но это то, что яused.
Другое дело, что вам кажется, что вам нужно позвонить imagesavealpha
, прежде чем вы сохраните любую альфа-информацию в изображение png, иначе она будет потеряна.Мне сложно сказать, почему это не настройка по умолчанию.
В целом мой подход был:
$imgname = "whiteim.png";.
$im = imagecreatefrompng ($imgname);
imagefill($im, 0,0, imagecolorallocate($im, 255,0,0));
$imgname = "result.png";
imagesavealpha($im, True);
imagepng($im, $imgname ); // save image as png
imagedestroy($im);