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).
<?php
// sprawdzenie, czy dostępne są odpowiednie dane zmiennych
// zmienne to tekst_przycisku oraz kolor
$tekst_przycisku = $_REQUEST['tekst_przycisku'];
$kolor = $_REQUEST['kolor'];
if((empty($tekst_przycisku) || empty($kolor)) || (!($kolor=='czerwony' || $kolor=='niebieski' || $kolor=='zielony'))) {
echo 'Stworzenie obrazka niemożliwe - formularz wypełniony niepoprawnie'; }
// utworzenie obrazka o prawidłowym tle oraz sprawdzenie wielkości
$ob = ImageCreateFromPng($kolor.'-przycisk.png');
if (!$ob)
{
echo 'Stowrzenie obrazka nie powiodło się.'; }
$szerokosc_obrazka = ImageSX($ob);
$wysokosc_obrazka = ImageSY($ob);
// przyciski muszą mieć 18-pikselowy margines od krawędzi
$szerokosc_obrazka_bez_marginesow = $szerokosc_obrazka - (2 * 18);
$wysokosc_obrazka_bez_marginesow = $wysokosc_obrazka - (2 * 18);
// Obliczenie pasującego rozmiaru czcionki i odpowiednie jego zmniejszenie
// Rozpoczęcie od największego rozmiaru, który intuicyjnie pasowałby do przycisków
$rozmiar_czcionki = 33;
// Trzeba wskazać GD2, gdzie znajdują się czcionki
putenv('GDFONTPATH=C:WINDOWSFonts'); $nazwaczcionki = 'Arial.ttf';
do
{
$rozmiar_czcionki--;
//obliczenie rozmiaru tekstu przy tym rozmiarze czcionki
$bbox=ImageTTFBbox($rozmiar_czcionki, 0, $nazwaczcionki, $tekst_przycisku);
$tekst_prawy = $bbox[2]; //prawa współrzędna
$tekst_lewy = $bbox[0]; //lewa współrzędna
$szerokosc_tekstu = $tekst_prawy - $tekst_lewy; // jaki szeroki?
$wysokosc_tekstu = abs($bbox[7
] - $bbox[1
]); // jaki wysoki?
} while($rozmiar_czcionki > 8 &&
($wysokosc_tekstu > $wysokosc_obrazka_bez_marginesow ||
$szerokosc_tekstu > $szerokosc_obrazka_bez_marginesow)
);
if($wysokosc_tekstu>$wysokosc_obrazka_bez_marginesow ||
$szerokosc_tekstu>$szerokosc_obrazka_bez_marginesow)
{
// żaden możliwy do odczytania rozmiar czcionki nie pasuje
echo 'Wprowadzony tekst nie pasuje do przycisku.<br />'; }
else
{
// odnaleziono pasujący rozmiar czcionki
// teraz należy obliczyć jego współrzędne
$tekst_x=$szerokosc_obrazka/2.0 - $szerokosc_tekstu/2.0;
$tekst_y=$wysokosc_obrazka/2.0 - $wysokosc_tekstu/2.0;
if ($tekst_lewy < 0)
$tekst_x += abs($tekst_lewy); //Dodanie współczynnika do lewej pozycji $nad_linia_tekstu=abs($bbox[7
]); // jak wysoko nad podstawą? $tekst_y+=$nad_linia_tekstu; //dodanie współczynnika podstawy
$tekst_y-=2; // współczynnik dostosowania do kształtu szablonu
$bialy=ImageColorAllocate($ob, 255, 255, 255);
ImageTTFText($ob, $rozmiar_czcionki, 0, $tekst_x, $tekst_y, $bialy, $nazwaczcionki,
$tekst_przycisku);
Header('Content_type: image.png'); ImagePNG($ob);
}
ImageDestroy($ob);
?>
Co może być nie tak?
Korzystam z Wampa (Apache 2.2.11, php 5.2.9)