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

Używam serwera: WampServer Version 2.0 (LINK).

Mam problem z dynamicznym generowaniem grafiki w PHP.
Takie cuś znalazłem na PHP.net (LINK) :
Cytat
In Windows, you'll include the GD2 DLL php_gd2.dll as an extension in php.ini. The GD1 DLL php_gd.dll was removed in PHP 4.3.2. Also note that the preferred truecolor image functions, such as imagecreatetruecolor(), require GD2.


Więc otworzyłem plik php.ini i znalazłem tam coś takiego

...
; Windows Extensions...(potem kilka tych *.dll)
extension=php_gd2.dll
...

Ponadto w WampSerwer jest coś takiego:


I wreszcie moje pytanie: Czy ja o czymś zapomniałem jeśli chodzi o dynamiczne generowanie grafiki? Bo przeglądałem tutoriale na internecie i żaden mi nie chciał poprawnie działać. Może trzeba dograć jakieś jeszcze biblioteki, rozszerzenia albo co?

Oto przykład z php.net (który mi nie działał sadsmiley02.gif ):
Kod
<?php
header("Content-type: image/png");
$string = $_GET['text'];
$im     = imagecreatefrompng("images/button1.png");
$orange = imagecolorallocate($im, 220, 210, 60);
$px     = (imagesx($im) - 7.5 * strlen($string)) / 2;
imagestring($im, 3, $px, 9, $string, $orange);
imagepng($im);
imagedestroy($im);
?>


Bardzo proszę o pomoc i z góry dziękuje za pomoc.
wookieb
A był jakis blad?
Bo nie wiem czy zauwazyles ale w kodzie który podales jest wczytywany obrazek. images/button1.png
tmgryf
image.php
  1. <?php
  2. $obrazek=ImageCreate(48,14); //ztworz obrazek o wymiarach 48x14
  3.        $jasnoszary=ImageColorAllocate($obrazek,245 ,245 ,245); //stworz kolor i powiarz z obrazkiem
  4.        $czarny=ImageColorAllocate($obrazek,0 ,0 ,0); //stworz kolor i powiarz z obrazkiem
  5.        ImageFill($obrazek,1,1,$jasnoszary); //wypelnij obrazek kolorem
  6.        $a="ALA"; //oczywista oczywistosc
  7.        ImageString($obrazek,5,1,0,$a,$czarny); //wyswietl napis na $obrazek rozmiwarem czcionki 5 w pozycji x=1 y=0 kolorem $czarny
  8.        Header("Content-type: image/jpeg"); //wyslij naglowek - jako ze bedziemy robic z tego obrazek
  9.        imagejpeg($obrazek,NULL,20);//wyslij obrazek w jakosci 20%
  10. ?>


a pozniej w HTML
  1. <img src="image.php" />



i masz obrazek z "niczego"
r_mag13
Tak, wiedziałem o tym że ten plik był wczytywany. Kod tmgryf-a nie działa. Możliwe że serwer mi nie działa.
Dziwna sprawa:
mam w folderze www dwa pliki: image.php (w środku ma to co napisał kolega) oraz plik obrazek.html w którym jest <img src="image.php" />.
I teraz tak: jeżeli otworze plik html przez localhost to mi wywala białą stronę, a jeżeli klikne na nia dwa razy ( file:///C:... ) to mi wywala taki znaczek . Z tym że jeśli dam na niego PPM i 'pokaż obrazek' to mi pokazuje co jest w image.php, więc oczywiście rozumie przez to że to może działać tylko przez LOCALHOST.

Są trzy możliwości:
1) zrobiłem jakiś głupi błąd przez który to nie chce działać (najbardziej prawdopodobne),
2) kolega tmgryf popełnił błąd w kodzie (szczerze w to wątpie),
3) serwer zepsuty lub coś ma niezainstalowane(serwer wczoraj przeinstalowałem bo mi sie zepsił).
wookieb
Zacznijmy od tego czy gd sie poprawnie uruchomil.
Włącz porządne raportowanie błędów (E_ALL) i potem
Kod
var_dump(function_exists('gd_info'));

Jeżeli bedzie false tzn ze gd nie uruchomiło sie poprawnie.
Jeżeli true to spróbuj zrobić test z tym kodem.
  1. <?php
  2. $values = array(
  3.            40,  50,  // Point 1 (x, y)
  4.            20,  240, // Point 2 (x, y)
  5.            60,  60,  // Point 3 (x, y)
  6.            240, 20,  // Point 4 (x, y)
  7.            50,  40,  // Point 5 (x, y)
  8.            10,  10   // Point 6 (x, y)
  9.            );
  10.  
  11. // create image
  12. $image = imagecreatetruecolor(250, 250);
  13.  
  14. // allocate colors
  15. $bg   = imagecolorallocate($image, 200, 200, 200);
  16. $blue = imagecolorallocate($image, 0, 0, 255);
  17.  
  18. // fill the background
  19. imagefilledrectangle($image, 0, 0, 249, 249, $bg);
  20.  
  21. // draw a polygon
  22. imagefilledpolygon($image, $values, 6, $blue);
  23.  
  24. // flush image
  25. header('Content-type: image/png');
  26. imagepng($image);
  27. imagedestroy($image);
  28. ?>
r_mag13
Wywaliło bool(true), ale dalej biała strona worriedsmiley.gif

poprawka: nie wywala już białej strony przez localhost, tylko taki sam znaczek jak pokazywałem wczesniej. BTW, to jest dobrze?:
Kod
error_reporting(E_ALL);
ini_set('display_errors', 1);
wookieb
Dobrze.Wywal
Kod
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
i powiedz jakie błędy się pokażą.
r_mag13
Tzn to z tym error ma być w tym kodzie image.php (tym twoim)? Jeżeli tak to dalej wywala true. A jeżeli nie to nic nie wywala...
Ja wiem że może gadam głupoty i niektóre rzeczy powinny być dla mnie oczywiste, ale ja zaczynam dopiero zabawę z php.. więc jak głupio będę gadał to mnie poprawiajcie.
wookieb
Daj tylko to
  1. <?php
  2. ini_set('display_errors', 1);
  3. $values = array(
  4.            40,  50,  // Point 1 (x, y)
  5.            20,  240, // Point 2 (x, y)
  6.            60,  60,  // Point 3 (x, y)
  7.            240, 20,  // Point 4 (x, y)
  8.            50,  40,  // Point 5 (x, y)
  9.            10,  10   // Point 6 (x, y)
  10.            );
  11.  
  12. // create image
  13. $image = imagecreatetruecolor(250, 250);
  14.  
  15. // allocate colors
  16. $bg   = imagecolorallocate($image, 200, 200, 200);
  17. $blue = imagecolorallocate($image, 0, 0, 255);
  18.  
  19. // fill the background
  20. imagefilledrectangle($image, 0, 0, 249, 249, $bg);
  21.  
  22. // draw a polygon
  23. imagefilledpolygon($image, $values, 6, $blue);
  24. ?>

I odpal ten plik bezpośrednio w przeglądarce. Jeżeli będą jakieś błedy to juz wszystko jasne. Jezeli nie to sprawdz czy masz najnowsza wersje gd.
r_mag13
takie coś wyskoczyło: ďťż
wookieb
Czyli masz śmieszne znaczki na początku. Spróbuj wywalić wstawianie nagłówków BOM w twoim edytorze tekstu dla tych plików.
Jeżeli już to zrobisz dodaj na koniec twoje pliku
  1. <?php
  2. header('Content-type: image/png');
  3. imagepng($image);
  4. imagedestroy($image);
  5. ?>

i potem podaj kod.
r_mag13
Działa! Dziekuje Ci bardzo. Ale czego to była wina? Tych nagłówków BOM?
wookieb
Jak widać
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.