Php - zastąp podstawowy kolor przezroczystego obrazu png
Szukałem dużo i znalazłem tylko kilka rozwiązań (w google i stackoverflow, więc proszę nie zaznaczać tego jako duplikatu, chyba że jest naprawdę powielone pytanie), ale problemy są twardymi krawędziami. Czy istnieje jakikolwiek właściwy sposób zmiany koloru bazowego, powiedzmy czarny obraz png z przezroczystym tłem, ale aby zachować miękkie krawędzie?
To jest przykładowy obraz:
Chcę, żeby wyglądało to tak:
ale rozwiązania, które znalazłem, dają mi ten:
Ponieważ będę używał tego na moim lokalnym serwerze, tylko do użytku osobistego, doceniana jest każda biblioteka php, która może pomóc w osiągnięciu tego celu.
AKTUALIZACJA:
To jest funkcja, która daje mi trzeci obraz:
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);
}
Pierwotnie funkcja ta była rozwiązaniem dla obrazów GIF (paleta 255 kolorów), więc myślę, że dlatego są twarde krawędzie. Szukam rozwiązania (ulepszenia tego skryptu), aby zachować przejrzystość i miękkie krawędzie obrazu PNG.
EDYCJA 2:
Znalazłem tutaj interesujące podejście, używając płótna HTML5 i javascript tutaj:http://users7.jabry.com/overlord/mug.html
Może ktoś może mieć pomysł, jak przetłumaczyć to na PHP, jeśli to możliwe.
NOWE ROZWIĄZANIE
W odpowiedziach