Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: GD - dziwne zachowanie
Forum PHP.pl > Forum > PHP
kalu111
Witam,
Od pewnego czasu zmagam się z dziwnym problemem dotyczącym generowania prostej grafiki w GD.
  1. <?php
  2. $rNewImage = imagecreatetruecolor(120, 90);
  3.    imagefill($rNewImage, 0, 0, imagecolorallocate($rNewImage, 255, 255, 255));
  4.    
  5.    header('Content-Type: image/jpeg');
  6.      
  7.   imagejpeg($rNewImage, null, 100);
  8. ?>

Staram się utworzyć obrazek z białym tłem. Wszystko działa poprawnie do momentu, gdy do skryptu przed kodem generujacym grafikę dołączam pliki swojej strony (są to klasy własnej biblioteki). Obrazek zamiast mieć tło biale ma tło czarne.
Starałem się rozwiązać problem różnymi sposobami - jedyne co mi przyszło na myśl to to, czy różne kodowanie plików mojej biblioteki może mieć wpływ na nieprawidłowe generowanie obrazków questionmark.gif
l0ud
A te biblioteki na pewno nie generują żadnego wyjścia? (chociażby jakaś spacja, znak nowej linii). Może są np. zapisane w UTF-8 z BOM? (muszą być bez)
messmaker
ja bym spróbował z:
  1. <?php
  2. imagefill($rNewImage, 0, 0, imagecolorallocate($rNewImage, 254, 254, 254));
  3. ?>


ot tak, żeby sprawdzić czy zaczernia każdą opcję, zresztą 254 dla oka też będzie praktycznie białe
kalu111
Próbowałem, ale bez skutku .
maly_swd
dolaczaj po 1 bibliotece i za kazdym razem sprawdzaj czy jest ok, jak natrafisz na ta na ktorej masz blad to bedziesz wiedzial ze ona cos miesza:)
sprawdz cos takiego z zaladowanymi wszystkimi klasami. Jak obrazek wygeneruje sie do pliku i bedzie mial biale tlo to znaczy ze Twoje klasy wysylaja gdzies "biale znaki"
  1. <?php
  2. $rNewImage = imagecreatetruecolor(120, 90);
  3.   imagefill($rNewImage, 0, 0, imagecolorallocate($rNewImage, 255, 255, 255));
  4.  
  5.  
  6.      
  7.  imagejpeg($rNewImage,'test.jpg', 100);
  8. ?>
kalu111
Tak też robiłem, skutkowało jedynie tym, że znajdywałem fragmenty kodu, które powowdowały bład, ale jawnie nie wysyłają one żadnych białych znaków, oto fragment kodu w klasie, który wszystko mi brudzi:
  1. <?php
  2. for ($i = $aSetup['size']; $i >= 0; $i--) {
  3.                $aTTFBBox = imagettfbbox($i, $aSetup['rotate'], $aSetup['font'], $sString);
  4.            $aTTFBBox = imagettfbbox($i, $aSetup['rotate'], $aSetup['font'], $sString);
  5.            $iTTFBBoxHeight = abs($aTTFBBox[7] - $aTTFBBox[1]);
  6.            $iTTFBBoxWidth = ($aTTFBBox[2] - $aTTFBBox[0]);
  7.            if ($iTTFBBoxHeight <= $this->getHeight() && $iTTFBBoxWidth <= $this->getWidth()) {
  8.                $iTextSize = $i;
  9.                break;
  10.            }
  11.        }
  12. ?>

Dodam, że jedynie te klasy są dołączane, żadna z nich nie jest wykonywana, nie tworzę obiektów itp.
maly_swd
1. zrob dokladnie tak jak napisalem, wywolaj ten kod co podalem poprzednio, dolacz do niego klasy te co masz i sprawdz efekt.
2. uruchom swoj kod i z tego pliku gdzie masz TTFBOX .. wywal z konca "?>"
Moze byc tak ze masz:
<?
tu jakis kod.

?>
ENTER
ENTER

i przez to masz biale znaki, a jak wykasujesz "?>" to wtedy do konca plik jest traktowany jako php
kalu111
Próbowałem i bez znacznika zamykającego, ale nie działa.
Prawidłowy plik graficzny ma wage 881 b zaś błędny 883 czyli gdzieś uciekają mi 2 znaki.
Nie mam już dalszych idei...


Uściślając mój problem, to dodaje jeden plik do skryptu generującego obrazek.
Plik ten zawiera deklaracje pewnej klasy.
Gdy usunę ciało tej klasy, generowanie obrazka działa prawidłowo!
W ciele klasy nie ma żadnych deklaracji echo lub print które mogłyby coś wyrzucać do przeglądarki.
maly_swd
pokaz kod,
kalu111
Witam raz jeszcze,
Postanowiłem wrócić do tematu.
Metodą prób i błędów doszedłem do jednego wniosku, otóż podmieniłem funkcję imagefill na imagefilledrectangle i o dziwo zadziałało!

Może to komuś się przyda winksmiley.jpg
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.