Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][GD]imagettftext - problem z przeźroczystością pikseli wokół liter na obrazku z przeźroczystym tłem (PNG)
Forum PHP.pl > Forum > Przedszkole
darko
Witam!
Mam problem z tworzeniem przezroczystości tła w obrazkach generowanych na podstawie tekstu, niby jest ustawione na kolor biały, jednak, w powiększeniu wyraźnie widać, że dookoła liter tworzą się różne piksele w rozmaitych odcieniach szarości. Chciałbym się pozbyć tych pixeli otaczających każdą literę, nie wiem, co robię źle czy coś z moim kodem nie tak, a może wina leży po stornie użytych czcionek ? Proszę o jakieś sensowne wskazówki.

Kod:
  1. function createImageFromText(
  2. $_text = "text",
  3. $_font_path,
  4. $_width = 1200,
  5. $_height = 30,
  6. $_font_size = 12,
  7. $_font_color = array(0, 0, 0),
  8. $_background_color = array(255, 255, 255),
  9. $_shadow = false,
  10. $_save = false,
  11. $_save_filename = "test.png",
  12. $_save_quality = 0) {
  13.  
  14. if(!$_save) {
  15. header('Content-type: image/png');
  16. }
  17.  
  18. $im = imagecreatetruecolor($_width, $_height);
  19. $background_color = imagecolorallocate($im, $_background_color[0], $_background_color[1], $_background_color[2]);
  20. $font_color = imagecolorallocate($im, $_font_color[0], $_font_color[1], $_font_color[2]);
  21.  
  22. imagefilledrectangle($im, 0, 0, $_width-1, $_height-1, $background_color);
  23. imagecolortransparent($im, $background_color);
  24.  
  25. if($_shadow) {
  26. imagettftext($im, $_font_size, 0, 11, 21, $font_color, $_font_path, $_text);
  27. }
  28.  
  29. imagettftext($im, $_font_size, 0, 10, 20, $font_color, $_font_path, $_text);
  30.  
  31. if(!$_save) {
  32. imagepng($im);
  33. } else {
  34. imagepng($im, $_save_filename, $_save_quality);
  35. }
  36. imagedestroy($im);
  37. }
  38. $fonts = array("MaszynaAEG","Barme","Jiczyn","KeiserSousa","Kobajashi","Komix");
  39.  
  40. foreach($fonts as $font) {
  41. //
  42. createImageFromText(
  43. "To jest testowy tekst",
  44. "/usr/share/fonts/truetype/polish/".$font.".ttf",
  45. 350,
  46. 30,
  47. 12,
  48. array(0, 0, 0),
  49. array(255, 255, 255),
  50. false,
  51. true,
  52. "fonty/".$font.".png",
  53. 0
  54. );
  55. //
  56. echo "<img src=\"fonty/".$font.".png\" ><br />";
  57. //
  58. }


Rezultat działania:









ps. fonty pobrane ze strony Bartka Nowaka (dzięki za polskie znaki smile.gif ciągle brakuje polskich ttf-ów na Debiana)
Do poprawnego działania skryptu należy utworzyć folder fonty (z chmod 777), do którego zostaną wrzucone wygenerowane pliki PNG, w wywołaniu funkcji podać ścieżkę do użytych czcionek oraz podmienić wartości w tablicy $fonts na nazwy właściwych fontów.
maly_swd
A pod jaka przegladarka to ogladasz? IE ma problemy z png i alpha.
Inna sprawa ze fonty maja wygladzania krawedzi i te posrednie pixele sa wskazane (dostaja odpowiedni kanal alpha).

To co wstawiles na forum wyglada dobrze (dostaje szary kolor tla)
darko
Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 na Debianie Lenny.

Te pośrednie pixele (które chyba nie do końca dostają ten kanał alpha) wymykając się spod koloru 255, 255, 255 stają się nieprzeźroczyste, co wyraźnie widać w momencie kiedy robię znak wodny z takiego napisu na jakimś innym obrazku, który ma ciemne tło. Wtedy wygląda to po prostu paskudnie, wręcz amatorsko, jakby jakieś dziecko nieudolnie literki w paincie powycinało. Problemy zaczęły się w momencie ustawienia przeźroczystości dla tła wygenerowanego pliku PNG. Wiem, że mógłbym dodać drugi kolor dla kanałowania, jednak te piksele mają różne barwy i dalej nie wiem, jak się ich pozbyć, próbowałem różnych zestawień funkcji imagecolortransparent, imagealphablending oraz imagesavealpha z różnymi wartościami parametrów i... dalej nic, może po prostu powinienem zmienić czcionki, na takie bez wygładzania krawędzi questionmark.gif
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.