Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rysowanie za pomocą PHP
Forum PHP.pl > Forum > PHP
danon198901
Witam,

potrzebuje wykorzystać proste rysowanie w PHP. Posiadam bibliotekę GD, napisałem prosty kod, który powiniene narysować koło, jednak moim oczom ukazuje się informacja: "Obrazek nie może zostać wyświetlony ponieważ zawiera błędy".

  1. <html>
  2. <head>
  3. <title>Koło</title>
  4. <head>
  5. <body>
  6. <?php
  7. header("Content-type: image/png");
  8. $image = ImageCreateTrueColor(500, 500);
  9.  
  10. $background = ImageColorAllocate($image, 255, 255, 255);
  11. $color = ImageColorAllocate($image, 250, 20, 20);
  12.  
  13. ImageFill($image, 1, 1, $background);
  14. ImageArc($image, 100, 100, 50, 50, 0, 0, $color);
  15.  
  16. ImagePng($image);
  17. ?>
  18. </body>
  19. </html>


Ktoś mi może podpowiedzieć skąd ten błąd?
Spawnm
Przed header nie możesz nic wyświetlać. W skrypcie który ma generować obraz nie można zupełnie nic innego wyświetlać.
Aby wyświetlić obraz generowany przez skrypt php używamy <img src="skrypt_z_obrazkiem.php">
danon198901
ale przecież przed header'em (co widać na skrypcie powyżej) nic kompletnie nie jest wyświetlane więc skąd ten błąd?

Co do opcji <img src="skrypt.php"> to nie rozumiem idei, bo przecież kolejny plik php się tworzy, a treść pozostaje bez zmian.
Fakt jest taki, że opcja z <img> zadziałała...ale nie działa ona w momencie kiedy odbieram sobie informacje z poprzedniej strony.
Przykładowo załóżmy sobie (bo taka idea mi przyświeca), że na poprzedniej stronie wypełniam formularz, który posłuży mi za narysowanie elementów. Np. rysuję sobie koło, mam dwa pola tekstowe "od" oraz "do". Nie wyświetlam nic tylko odbieram informacje poprzez tablicę $_POST, które później wykorzystam np.
  1. $od = $_POST['od'];
  2. $do = $_POST['do'];
  3. ImageArc($image, $od, $do, 50, 50, 0, 0, $color);


to i tak nie zadziała. Reasumując raz jeszcze mam 3 pliki:

a ) Formularz HTML ('dowolny.php') - załóżmy, że mam 2xtextbox oraz przycisk submit
  1. <input type="text" name="od" id="od" size="20" maxlength="10" />
  2. <input type="text" name="do" id="do" size="20" maxlength="10" />
  3.  
  4. <input type="submit" value="Rysuj" id="rysuj" accesskey="x" />


b ) Plik php z <img src> ('dowolny_rysunek.php')
  1. <html>
  2. <head>
  3. <title>Rysunek</title>
  4. <head>
  5.  
  6. <body>
  7. <img src="rysunek.php">
  8. </body>
  9. </html>


c )Skrypt rysujący ('rysunek.php')
  1. <?php
  2.  
  3. $od = $_POST['od'];
  4. $do = $_POST['do'];
  5. header("Content-type: image/png");
  6. $image = ImageCreateTrueColor(500, 500);
  7.  
  8. $background = ImageColorAllocate($image, 255, 255, 255);
  9. $color = ImageColorAllocate($image, 250, 20, 20);
  10.  
  11. ImageFill($image, 1, 1, $background);
  12. ImageArc($image, $od, $do, 50, 50, 0, 0, $color);
  13.  
  14. ImagePng($image);
  15. ?>


I teraz w pliku nr1 czy też zastosuję:
<form name="frm" enctype="multipart/form-data" action="rysunek.php" method="post">
czy też
<form name="frm" enctype="multipart/form-data" action="dowolny_rysunek.php" method="post">

to rysowanie i tak nie działa:( Kiedy robię samo rysowanie (bez odbierania tablicą $_POST rysowanie działa. Proszę mi wytłumaczyć jak prostakowi o co tu chodzi i jak osiągnąć zamierzony cel, bo ja już załamuję ręce.
markonix
Nie możesz nic wyświetlić czyli przesłać do przeglądarki, a przesyłasz elementy HTML.

FORMULARZ z danymi -> dane z POST do zmiennych -> rysunek <img src="skrypt.php?tu dane ze zmiennych" />
W ten sposób wyświetlisz i obrazek i formularz, jeżeli to nie jest wymagane to po prostu przesyłasz dane z formularza do pliku z generowaniem obrazu.
danon198901
Cytat(markonix @ 27.03.2013, 00:04:23 ) *
Nie możesz nic wyświetlić czyli przesłać do przeglądarki, a przesyłasz elementy HTML.

FORMULARZ z danymi -> dane z POST do zmiennych -> rysunek <img src="skrypt.php?tu dane ze zmiennych" />
W ten sposób wyświetlisz i obrazek i formularz, jeżeli to nie jest wymagane to po prostu przesyłasz dane z formularza do pliku z generowaniem obrazu.


Mógłbyś troszkę jaśniej? W chwili obecnej nie jestem w stanie pojąć dlaczego zwykłe odebranie $_POST/$_REQUEST wadzi w poprawnym rysowaniu, a niestety w książce na podstawie której się uczę (jak i informacji z google) nie ma wzmianki na ten temat. Najlepiej poproszę o prosty skrypt na przykładzie, który podałem wtedy najłatwiej będzie zobaczyć mi różnice i sposób działania tego skryptu. Z góry dziękuję za wszelką chęć pomocy:)
ssstrz
chodzi o to:

  1. <html>
  2. <head>
  3. <title>Koło</title>
  4. <head>
  5. <body>
  6. <?php
  7. header("Content-type: image/png");

w linijce 1 dane do header zostały wysłanye ( i nie można robić tego 2 raz) , w linijce7 robisz to 2 raz
danon198901
Cytat(ssstrz @ 27.03.2013, 09:25:31 ) *
chodzi o to:

  1. <html>
  2. <head>
  3. <title>Koło</title>
  4. <head>
  5. <body>
  6. <?php
  7. header("Content-type: image/png");

w linijce 1 dane do header zostały wysłanye ( i nie można robić tego 2 raz) , w linijce7 robisz to 2 raz


Aha, ok, kumam. Ale nieco wyżej napisałem również, że mam plik, który nie zawiera header po raz drugi i również nie wyświetla mi obrazka:
  1. <?php
  2.  
  3. $od = $_POST['od'];
  4. $do = $_POST['do'];
  5.  
  6. $image = ImageCreateTrueColor(500, 500);
  7.  
  8. $background = ImageColorAllocate($image, 255, 255, 255);
  9. $color = ImageColorAllocate($image, 250, 20, 20);
  10.  
  11. ImageFill($image, 1, 1, $background);
  12. ImageArc($image, $od, $do, 50, 50, 0, 0, $color);
  13. header("Content-type: image/png");
  14. ImagePng($image);
  15. ?>
markonix
Jeżeli wpiszesz ręcznie te liczby to działa?
Jeśli tak to kwestia tego że $_POST nie zawiera tego czego oszukujesz.
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.