Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][GD]imagettftext - problem z przeźroczystością pikseli wokół liter na obrazku z przeźroczystym tłem (PNG)
darko
post 8.12.2009, 15:44:08
Post #1





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.

Ten post edytował darko 8.12.2009, 18:40:56


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
maly_swd
post 8.12.2009, 18:15:20
Post #2





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


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)


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
darko
post 8.12.2009, 18:30:55
Post #3





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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

Ten post edytował darko 8.12.2009, 18:43:11


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:48