Я много искал, и я нашел только несколько решений (в google и stackoverflow, поэтому, пожалуйста, не отмечайте это как дубликат, если не существует действительно дублированного вопроса), но проблемы - это жесткие края. Есть ли правильный способ изменения базового цвета, скажем, черного png-изображения с прозрачным фоном, но для сохранения мягких краев?
Это пример изображения:
Я хочу, чтобы это выглядело так:
но найденные решения дают мне следующее:
Так как я буду использовать это на своем локальном хосте, только для личного использования, любая php-библиотека, которая могла бы помочь в этом, была бы оценена.
UPDATE:
Это функция, которая дает мне третье изображение:
function LoadPNG($imgname)
{
$im = imagecreatefrompng ($imgname);
imagetruecolortopalette($im,false, 255);
$index = imagecolorclosest ( $im, 0,0,0 ); // GET BLACK COLOR
imagecolorset($im,$index,0,150,255); // SET COLOR TO BLUE
$name = basename($imgname);
imagepng($im, getcwd()."/tmp/$name" ); // save image as png
imagedestroy($im);
}
$dir = getcwd()."/img/";
$images = glob($dir."/*.png",GLOB_BRACE);
foreach($images as $image) {
LoadPNG($image);
}
Первоначально эта функция была решением для изображений GIF (палитра из 255 цветов), поэтому я догадываюсь, почему существуют жесткие края. Я ищу решение (улучшение для этого script), чтобы сохранить прозрачность и мягкие края изображения PNG.
ИЗМЕНИТЬ 2:
Я нашел интересный подход, используя html5 canvas и javascript здесь: http://users7.jabry.com/overlord/mug.html
Может быть, у кого-то может быть идея, как перевести это на PHP, если это возможно.
НОВОЕ РЕШЕНИЕ
В ответах