Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][gd] imagecolorset a PNG, JPEG
Forum PHP.pl > Forum > Przedszkole
lord_t
Elo,

chciałem napisać prosty skrypt, który zmienia jeden kolor na obrazku na inny, napisałem go dla JPG, ale nie działał. Przerobiłem na PNG i znów. Na necie znalazłem prawie identyczny kod, ale dla gifów - ten działa.

Czy ta funkcja nie obsługuje PNG, JPEG?
Jeśli tak to czemu nie?

Znacie jakieś sposoby, żeby ta funkcja zadziałała? Oprócz przerabiania najpierw wszystkiego na gifa.
Blame
http://lmgtfy.com/?q=gd+color+replacement I pierwszy lepszy skrypt:
  1. function html2rgb($input)
  2. {
  3. $input=($input[0]=="#")?substr($input, 1,6):substr($input, 0,6);
  4. return array(
  5. 'r'=>hexdec( substr($input, 0, 2) ),
  6. 'g'=>hexdec( substr($input, 2, 2) ),
  7. 'b'=>hexdec( substr($input, 4, 2) )
  8. );
  9. }
  10. function colorReplace($image,$oldcolor,$newcolor=false)
  11. {
  12. //make the colors rbg
  13. $rgbold = html2rgb($oldcolor);
  14. //make the old color transparant
  15. $oldcolor = imagecolorallocate($image, $rgbold[r], $rgbold[g], $rgbold[b]);
  16. imagecolortransparent($image, $oldcolor);
  17. if($newcolor)
  18. {
  19. $rgbnew = html2rgb($newcolor);
  20. //make a new image in the new color
  21. $newimage = imagecreatetruecolor(imagesx($image), imagesy($image));
  22. //color the new image
  23. $newcolor = imagecolorallocate($image,$rgbnew[r], $rgbnew[g], $rgbnew[b]);
  24. imagefill($newimage, 0, 0, $newcolor);
  25.  
  26. //paste the old image on the new colored image
  27. imagecopymerge($newimage,$image,0,0,0,0, imagesx($image), imagesy($image), 100);
  28. imagecopymerge($image,$newimage,0,0,0,0, imagesx($image), imagesy($image), 100);
  29. imagedestroy($newimage);
  30. }
  31. }

lord_t
Nie pytałem o sposób obejścia, a o funkcję imagecolorset(). I proszę, nie obrażaj mnie tym http://lmgtfy.com/.
wookieb
Działa. Tylko podaj kod jaki masz abyśmy mogli określic co jest nie tak.
lord_t
  1. $img =imagecreatefromjpeg('test.jpg');
  2. $ind =imagecolorclosest($img ,0,0,0); // 0,0,0 - black
  3.  
  4. imagecolorset($img, $ind ,255,0,0);
  5.  
  6. imagejpeg($img, 'result.jpg');
  7. imagedestroy($img);


Możliwe, że w powyższym kodzie jest jakaś literówka - nie mam możliwości go teraz odpalić.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.