Php - заменить базовый цвет прозрачного изображения PNG
Я много искал и нашел только несколько решений (на google и stackoverflow, поэтому, пожалуйста, непометить этот как дубликат, если нетЭто действительно дублирующий вопрос), но проблемы - это острые края. Есть ли какой-нибудь правильный способ изменить базовый цвет, пустьскажем, черная форма PNG изображения с прозрачным фоном, но чтобы сохранить мягкие края?
Это пример изображения:
Я хочу, чтобы это выглядело так:
но решения, которые я нашел, дают мне это:
Так как я буду использовать это на своем локальном хосте, только для личного использования, любая библиотека php, которая может помочь в достижении этого, приветствуется.
ОБНОВИТЬ:
Это функция, которая дает мне 3-е изображение:
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 цветов), поэтому я думаю, чтопочему есть жесткие края? Я ищу решение (улучшение этого сценария), чтобы сохранить прозрачность и мягкие края изображения PNG.
РЕДАКТИРОВАТЬ 2:
Я нашел интересный подход, используя html5 canvas и javascript здесь:http://users7.jabry.com/overlord/mug.html
Возможно, у кого-то может быть идея, как перевести это на PHP, если это возможно.
НОВОЕ РЕШЕНИЕ
В ответах