PHP ma co prawda filtr do przerabiania grafik na grayscale, ale w przypadku animowanych gifów powodowało to wyłączenie animicji - widoczna była tylko pierwsza klatka. Z tego też względu napisałem skrypt, który podmienia tabelę kolorów w Gif'e na odcienie szarości, nie naruszając reszty struktury pliku GIF.
Mam nadzieję, że się w najbliższym czasie "nie przyda".
<?php function Szare($plik){ ######################################################################### #Autor: Marcin Dzięciołowski # ######################################################################### #Funkcja Szare zwraca obraz ze zmienioną na szarości tablicą kolorów obrazka #wymaga podania w zmiennej $plik nazwy pliku #kontrola istnienia pliku oraz jego rozszerzenia switch ($rozszerzenie) { case "gif": ###################################################################### $dlugosc=$bin[0]*4+$bin[1]*2+$bin[2]*1; $dlugosc=3*pow(2,$dlugosc+1); ###################################################################### #kontrola ilości używanych kolorów - 3 ostatnie bity jedenastego bajtu for ($i=13;$i<13+$dlugosc;$i+=3){ #zamiana kolorów uwzględniając jaskrawość kolorów #w celu przyspieszenia zmniejszono dokładność do jednego miejsca po przecinku #powinno być: r=0.2117, g=0.7137, b=0.0746 $sr=ord($tresc[$i])*0.2; $sr+=ord($tresc[$i+1])*0.7; $sr+=ord($tresc[$i+2])*0.1; $tresc[$i]=chr($sr); $tresc[$i+1]=chr($sr); $tresc[$i+2]=chr($sr); } #zwraca Gif'a return true; break; case "jpg": $obraz = imagecreatefromjpeg($plik); if ($obraz && imagefilter($obraz, IMG_FILTER_GRAYSCALE)) { imagejpeg ($obraz); return true; }else{ return false; } break; case "png": $obraz = imagecreatefrompng($plik); if ($obraz && imagefilter($obraz, IMG_FILTER_GRAYSCALE)) { imagepng ($obraz); return true; }else{ return false; } break; default: return false; break; } }else{ return false; } } ?>