Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z GD
Forum PHP.pl > Forum > Przedszkole
thomson89
Witam!

Mam kod, z książki o php.

  1. <?php
  2. // sprawdzenie, czy dostępne są odpowiednie dane zmiennych
  3. // zmienne to tekst_przycisku oraz kolor
  4.  
  5. $tekst_przycisku = 'TEKST';
  6. $kolor = 'czerwony';
  7.  
  8. // utworzenie obrazka o prawidłowym tle oraz sprawdzenie wielkości
  9. $ob = ImageCreateFromPng($kolor.'-przycisk.png');
  10. if (!$ob)
  11. {
  12. echo 'Stowrzenie obrazka nie powiodło się.';
  13. }
  14.  
  15. $szerokosc_obrazka = ImageSX($ob);
  16. $wysokosc_obrazka = ImageSY($ob);
  17.  
  18. // przyciski muszą mieć 18-pikselowy margines od krawędzi
  19. $szerokosc_obrazka_bez_marginesow = $szerokosc_obrazka - (2 * 18);
  20. $wysokosc_obrazka_bez_marginesow = $wysokosc_obrazka - (2 * 18);
  21.  
  22. // Obliczenie pasującego rozmiaru czcionki i odpowiednie jego zmniejszenie
  23. // Rozpoczęcie od największego rozmiaru, który intuicyjnie pasowałby do przycisków
  24. $rozmiar_czcionki = 33;
  25.  
  26. // Trzeba wskazać GD2, gdzie znajdują się czcionki
  27. putenv('GDFONTPATH=C:\WINDOWS\Fonts\\');
  28. $nazwa_czcionki = 'Arial.ttf';
  29.  
  30. do
  31. {
  32. $rozmiar_czcionki--;
  33.  
  34. //obliczenie rozmiaru tekstu przy tym rozmiarze czcionki
  35. $bbox=ImageTTFBbox($rozmiar_czcionki, 0, $nazwa_czcionki, $tekst_przycisku);
  36.  
  37. $tekst_prawy = $bbox[2]; //prawa współrzędna
  38. $tekst_lewy = $bbox[0]; //lewa współrzędna
  39. $szerokosc_tekstu = $tekst_prawy - $tekst_lewy; // jaki szeroki?
  40. $wysokosc_tekstu = abs($bbox[7] - $bbox[1]); // jaki wysoki?
  41.  
  42. } while($rozmiar_czcionki > 8 &&
  43. ($wysokosc_tekstu > $wysokosc_obrazka_bez_marginesow ||
  44. $szerokosc_tekstu > $szerokosc_obrazka_bez_marginesow)
  45. );
  46.  
  47. if($wysokosc_tekstu>$wysokosc_obrazka_bez_marginesow ||
  48. $szerokosc_tekstu>$szerokosc_obrazka_bez_marginesow)
  49. {
  50. // żaden możliwy do odczytania rozmiar czcionki nie pasuje
  51. echo 'Wprowadzony tekst nie pasuje do przycisku.<br />';
  52. }
  53. else
  54. {
  55. // odnaleziono pasujący rozmiar czcionki
  56. // teraz należy obliczyć jego współrzędne
  57.  
  58. $tekst_x=$szerokosc_obrazka/2.0 - $szerokosc_tekstu/2.0;
  59. $tekst_y=$wysokosc_obrazka/2.0 - $wysokosc_tekstu/2.0;
  60.  
  61. if ($tekst_lewy < 0)
  62. $tekst_x += abs($tekst_lewy); //Dodanie współczynnika do lewej pozycji
  63. $nad_linia_tekstu=abs($bbox[7]); // jak wysoko nad podstawą?
  64. $tekst_y+=$nad_linia_tekstu; //dodanie współczynnika podstawy
  65.  
  66. $tekst_y-=2; // współczynnik dostosowania do kształtu szablonu
  67.  
  68. $bialy=ImageColorAllocate($ob, 255, 255, 255);
  69.  
  70. ImageTTFText($ob, $rozmiar_czcionki, 0, $tekst_x, $tekst_y, $bialy, $nazwa_czcionki,
  71. $tekst_przycisku);
  72.  
  73. Header('Content_type: image.png');
  74. ImagePNG($ob);
  75. }
  76.  
  77. ImageDestroy($ob);
  78. ?>


Troszku zmieniony bo był błąd invalid font name.

Zwraca zamiast obrazka, dwie strony jakiegoś gówna

Kod
wf<^Ż×Žűłeߝš{w~{Î=Ż{W03Ô0›a|بaڍQ8ëQŁpÖŁFᬇ5Ăëľ5ÄĚ5łčX!„BčĆLú™&…DDDJ)ĽE˜É8>†0  ó˜)DD)Ľ”2…HD,&
wookieb
Content-type a nie Content_type
thomson89
No, teraz działa. Ale pojawił się inny problem.

Jak kopiuje plik, do innego folderu na serwerze obrazek się nie generuje! O co w tym chodzi?
wookieb
Zakomentuje header i imagepng, włącz pełne wyświetlania błędów i pogadamy.
Meares
A pliki, z których tworzysz obrazek też zostały przeniesione? Ew. sprawdź ścieżkę.
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.