Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tworzenie obrazka w pętli.
Forum PHP.pl > Forum > PHP
Giluś
Część mam taki problem:
Wpisuję kilka danych w formularzu i później przesyłam je do php i tworzę obrazek, kilka obrazków, mniej więcej takie coś chce zrobić tylko ze w php:

Wyciąłem dwie tabelki ( z nr 1 i z nr 2 ) ponieważ różnią się one, nr 1 ma pierwsze pole czerwone, a nr drugi i kolejne mają już normalne pola, zrobiłem sobie taki skrypt:

  1. <form action='indexx.php' method='post'>
  2. <textarea name='osoby' style='width:400px; height:200px;'></textarea><br/>
  3. <input type='submit' value='Dodaj' style='width:80px'/>
  4. </form>
  5. <?php
  6. if ($_POST['osoby']) {
  7. $osoby = explode("|",$_POST['osoby']); // Wpisuję sobie zawodników w postaci: 1(miejsce zawodnika)|Zawodnik|Team|Czas|Czas od miejsca pierwszego i następnie enter i kolejna osoba
  8. foreach($osoby as $osoba){
  9. if ($osoba[0] == '1') {$tlo = 'nr1.png';} else {$tlo = 'nr.png';} // Ustawiam warunek, że jeśli miejsce zawodnika = 1 to dla niego jest tło z nr1.png, a jeśli nie to jest tło z nr.png i to ma tak sprawdzać dla każdego zawodnika
  10. header("Content-type: image/png"); // Ustawia header jako grafika png
  11. $im = imagecreatefrompng($tlo); // Ustawia tło
  12.  
  13. $rozmiar = 11; // Rozmiar czcionki
  14. $kat = 0; // Kąt ustawienia czcionki
  15. $lewa = 16; // Od lewej strony
  16. $gora = 15; // Od góry
  17. $kolor = imagecolorallocate($im, 255, 255, 255); // Kolor
  18. imagettftext($im, $rozmiar, $kat, $lewa, $gora, $kolor, "arial.ttf", $osoba[0]); // ustawia zmienne, czcionkę oraz $osoba[0] = miejsce zawodnika
  19.  
  20. $rozmiar = 11;
  21. $kat = 0;
  22. $lewa = 33;
  23. $gora = 15;
  24. $kolor = imagecolorallocate($im, 255, 255, 255);
  25. imagettftext($im, $rozmiar, $kat, $lewa, $gora, $kolor, "arial.ttf", $osoba[1]); // to samo co wyżej tlyko że $osoba[1] = imie zawodnika
  26.  
  27. $rozmiar = 11;
  28. $kat = 0;
  29. $lewa = 161;
  30. $gora = 15;
  31. $kolor = imagecolorallocate($im, 255, 255, 255);
  32. imagettftext($im, $rozmiar, $kat, $lewa, $gora, $kolor, "arial.ttf", $osoba[2]); // to samo co wyżej tylko $osoba[2] = team zawodnika
  33.  
  34. $rozmiar = 11;
  35. $kat = 0;
  36. $lewa = 367;
  37. $gora = 15;
  38. $kolor = imagecolorallocate($im, 255, 255, 255);
  39. imagettftext($im, $rozmiar, $kat, $lewa, $gora, $kolor, "arial.ttf", $osoba[3]); // to samo co wyżej tylko $osoba[3] = czas zawodnika
  40.  
  41.  
  42.  
  43. $rozmiar = 11;
  44. $kat = 0;
  45. $lewa = 446;
  46. $gora = 15;
  47. $kolor = imagecolorallocate($im, 255, 255, 255);
  48. imagettftext($im, $rozmiar, $kat, $lewa, $gora, $kolor, "arial.ttf", $osoba[4]); // to samo co wyżej tylko $osoba[4] = różnica czasu zawodnika od miejsca 1
  49.  
  50. imagepng($im, '', 100);
  51. }
  52. imagedestroy($im);
  53. }
  54. ?>

I od początku, czy stworzy mi się takich np: 40 kolumn w tym 1 z numerem 1 (z inną grafiką) a 39 z resztą taką samą grafiką wink.gif

I czemu wyświetlaja mi się takie błędu:


Warning: Cannot modify header information - headers already sent by (output started at F:\Program Files\WebServ\httpd\indexx.php:5) in F:\Program Files\WebServ\httpd\indexx.php on line 10
‰PNG  IHDR9­ěđ
Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib error in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: Cannot modify header information - headers already sent by (output started at F:\Program Files\WebServ\httpd\indexx.php:5) in F:\Program Files\WebServ\httpd\indexx.php on line 10
‰PNG  IHDR9­ěđ
Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib error in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: Cannot modify header information - headers already sent by (output started at F:\Program Files\WebServ\httpd\indexx.php:5) in F:\Program Files\WebServ\httpd\indexx.php on line 10
‰PNG  IHDR9­ěđ
Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib error in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: Cannot modify header information - headers already sent by (output started at F:\Program Files\WebServ\httpd\indexx.php:5) in F:\Program Files\WebServ\httpd\indexx.php on line 10
‰PNG  IHDR9­ěđ
Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib error in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: Cannot modify header information - headers already sent by (output started at F:\Program Files\WebServ\httpd\indexx.php:5) in F:\Program Files\WebServ\httpd\indexx.php on line 10
‰PNG  IHDR9­ěđ
Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib error in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: Cannot modify header information - headers already sent by (output started at F:\Program Files\WebServ\httpd\indexx.php:5) in F:\Program Files\WebServ\httpd\indexx.php on line 10
‰PNG  IHDR9­ěđ
Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib error in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: Cannot modify header information - headers already sent by (output started at F:\Program Files\WebServ\httpd\indexx.php:5) in F:\Program Files\WebServ\httpd\indexx.php on line 10
‰PNG  IHDR9­ěđ
Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib error in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: Cannot modify header information - headers already sent by (output started at F:\Program Files\WebServ\httpd\indexx.php:5) in F:\Program Files\WebServ\httpd\indexx.php on line 10
‰PNG  IHDR9­ěđ
Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib error in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: Cannot modify header information - headers already sent by (output started at F:\Program Files\WebServ\httpd\indexx.php:5) in F:\Program Files\WebServ\httpd\indexx.php on line 10
‰PNG  IHDR9­ěđ
Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib error in F:\Program Files\WebServ\httpd\indexx.php on line 53

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in F:\Program Files\WebServ\httpd\indexx.php on line 53
CuteOne
nie możesz wstawić header() do pętli.. ale wiedział byś to gdybyś poczytał czym są nagłówki. Po drugie przed znacznikiem <?php nie może się znaleźć kod html. Po trzecie jaki jest sens tworzenia takich obrazków? jeżeli chcesz mieć wyświetlanie napisu nad obrazkiem wystarczy, że dla diva ustawisz background z urlem do danego obrazka - więcej na google

  1. <div class="klasa">Mc Donald</div>
Giluś
Wiem, że to nie ma sensu, ale chciałbym generować taki obrazek (tylko, że duży nie tylko ta jedna kolumna) później go zapisywać do pliku całosc.png, zmieniłem troszkę kod:
  1. <?php
  2. if ($_POST['osoby']) {
  3. header('Content-Type: image/png');
  4. $osoby = explode("|",$_POST['osoby']);
  5. foreach($osoby as $osoba){
  6. if ($osoba[0] == '1') {$tlo = 'nr1.png';} else {$tlo = 'nr.png';}
  7. $im = imagecreatefrompng($tlo);
  8.  
  9. $rozmiar = 11;
  10. $kat = 0;
  11. $gora = 15;
  12. $kolor = imagecolorallocate($im, 255, 255, 255);
  13. imagettftext($im, $rozmiar, $kat, 16, $gora, $kolor, "arial.ttf", $osoba[0]);
  14. imagettftext($im, $rozmiar, $kat, 33, $gora, $kolor, "arial.ttf", $osoba[1]);
  15. imagettftext($im, $rozmiar, $kat, 161, $gora, $kolor, "arial.ttf", $osoba[2]);
  16. imagettftext($im, $rozmiar, $kat, 367, $gora, $kolor, "arial.ttf", $osoba[3]);
  17. imagettftext($im, $rozmiar, $kat, 446, $gora, $kolor, "arial.ttf", $osoba[4]);
  18.  
  19.  
  20.  
  21. imagepng($im);
  22. imagedestroy($im);
  23. }
  24. }
  25. ?>

  1. <form action='indexx.php' method='post'>
  2. <textarea name='osoby' style='width:400px; height:200px;'></textarea><br/>
  3. <input type='submit' value='Dodaj' style='width:80px'/>
  4. </form>


I doświadczenia:
Grafika nie jest taka jaką sobie wygenerowałem w Photoshopie, tzn zamiast takich ukośnych boków (patrz na obrazek u góry) są to prostokąty, kolejna uwaga, wyświetla mi się tylko numer zawodnika, a wpisałem: 1|abc|cde|222|333

Jakieś pomysły macie, jak poprawić ?
CuteOne
Poczytaj o przezroczystości w png. Hmm może obrazek za krótki i wpisuje ci tylko pierwszy tekst questionmark.gif smile.gif
Giluś
Są postępy:
Obrazek jest przeźroczysty
Ale są też błędy:
Obrazek ma szerokości: 569px, a ja najdalej tekst jest w 446px, i nie wiem czemu nie działa w polu tekstu wpisuję np.: " 1|2|3|4|5 " a wyświetla się tylko "1", reszta nie, nawet 2 powinna być wyświetlona, ale jest jeszcze jeden problemik jak wyświetlić drugiego zawodnika ?wink.gif chciałbym aby dodawać tak:
"
1|a1|b1|c1|d1
2|a2|b2|c2|d2
3|a3|b3|c3|d3
4|a4|b4|c4|d4
"
Jak zrobić ?

Edit:
Kod PHP wygląda tak:
  1. <?php
  2. if ($_POST['osoby']) {
  3. header('Content-Type: image/png');
  4. $osoby = explode("|",$_POST['osoby']);
  5. foreach($osoby as $osoba){
  6. if ($osoba[0] == '1') {$tlo = 'nr1.png';} else {$tlo = 'nr.png';}
  7. $im = imagecreatefrompng($tlo);
  8.  
  9. $col = imagecolorallocatealpha($im, 255, 255, 255, 100);
  10.  
  11. $rozmiar = 11;
  12. $kat = 0;
  13. $gora = 17;
  14. $kolor = imagecolorallocate($im, 255, 255, 255);
  15. imagettftext($im, $rozmiar, $kat, 14, $gora, $kolor, "arial.ttf", $osoba[0]);
  16. imagettftext($im, $rozmiar, $kat, 33, $gora, $kolor, "arial.ttf", $osoba[1]);
  17. imagettftext($im, $rozmiar, $kat, 161, $gora, $kolor, "arial.ttf", $osoba[2]);
  18. imagettftext($im, $rozmiar, $kat, 367, $gora, $kolor, "arial.ttf", $osoba[3]);
  19. imagettftext($im, $rozmiar, $kat, 446, $gora, $kolor, "arial.ttf", $osoba[4]);
  20.  
  21.  
  22. $im = imagerotate($im, 0, $col);
  23. imagesavealpha($im, true);
  24. imagepng($im);
  25. imagedestroy($im);
  26. }
  27. }
  28. ?>
Kshyhoo
Ja bym użył ImageCopyResampled, żeby poskładać wszystko do kupy.
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.