Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Skrypt tworzący przycisk.
Forum PHP.pl > Forum > Przedszkole
Vill
W książce z której się uczę jest skrypt tworzący przycisk, który nie działa. Biblioteka GD2 jest chyba prawidłowo zainstalowana bo wszystkie funkcje działają, nie wyskakują żadne błędy, ale zamiast stworzyć przycisk pojawia się ciąg znaków typu:

�PNG  ��� IHDR��ô���ć���ŹÝŕů�� �IDATx�íÝ�TTuţ?đ×˝ "żů��2)¸��d¨D�ë!�fiR��ë��K,!K4K¸š|�ü�q0ů"ëQą�ă "ql�%"ó!đqŃDEFÄ��űýăć4Â` t{>�Ěźßď{ß/Žđ�;ď;r���@p

Oto skrypt: (tekst i kolor przycisku wypełnia się wcześniej w formularzu).

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


Co może być nie tak?
Korzystam z Wampa (Apache 2.2.11, php 5.2.9)
wookieb
Nie pokazałeś jak wywolujsz ten skrypt. Powinno sie tak

Kod
<img src="twoj_skrypt.php?tekst_przycisku=tekst&kolor=kolor" alt=""/>
lewy87r
ustawienia serwera ? u mnie np na localu nie moge pdf-a otwierac ;] tylko wysweitla sie blad i wywala mi krzaczki ;]
ayeo
Witam!

Co to niby ma być? tongue.gif
  1. <?php
  2. Header('Content_type: image.png');
  3. ?>


Statystycznie jest dużo większ szansa, że zadziała takie coś:
  1. <?php
  2. header('Content-Type: image/png');
  3. ?>


Pozdrawiam!
Vill
Tak było w książce tongue.gif

Teraz działa dzięki smile.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.