Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tworzenie obrazka
Forum PHP.pl > Forum > Przedszkole
Guest
  1. <?php
  2.  
  3. header("Content-type: image/png");
  4. $im = @imagecreate(100, 50)
  5.  or die("Cannot Initialize new GD image stream");
  6. $background_color = imagecolorallocate($im, 255, 255, 255);
  7. $text_color = imagecolorallocate($im, 233, 14, 91);
  8. imagestring($im, 1, 5, 5, "A Simple Text String", $text_color);
  9. imagepng($im);
  10. imagedestroy($im);
  11.  
  12. ?>


Znalazłem na php.net ten skrypt który tworzy obrazek z napisem. Problem polega na tym że nie wiem jak wyświetlić ten obrazek w połowie strony. Ponieważ wyskakuje mi błąd związany z header
Hacker
ten skrypt wrzucasz do odzielnego pliku a odwołujesz się do niego przez html <img src="plik_tego_skryptu_z_tym_kodem.php">
Guest
Tak zrobiłem i obrazek mi się wyświetla tylko nie wiem jak teraz sprawdzić czy podany tekst w formularzu zgodny jest z tekstem na obrazku, ponieważ nie wiem jak przesłać ten napis smieną ukrytą POST
.radex
jeżeli zrobisz <form> to moższ zrobić <input type="hidden" name="x" value="x">
Guest
Cytat(radex_p @ 2006-04-29 19:32:38)
jeżeli zrobisz <form> to moższ zrobić <input type="hidden" name="x" value="x">

Tak wiem ale nie wiem jak wstawić do value ten tekst który został wylosowany w zewnętrznym pliku i wyświetlony w formie obrazka za pomocą
  1. <img src="plik_tego_skryptu_z_tym_kodem.php">
Guest
Widzę że nikt nie potrafi mi odpowiedzieć. To wykonbinowałem inny sposób ale nie wiem czy można go stosować, poprostu tworzony obrazek jest za każdym razem zapisywany na dysku:
  1. <?php
  2. $los = rand(10,99);
  3. $obrazek = imagecreate(30, 15);
  4. $background_color = imagecolorallocate($obrazek, 255, 255, 255);
  5. $text_color = imagecolorallocate($obrazek, 130, 130, 130);
  6. imagestring($obrazek, 5, 5, 2, $los, $text_color);
  7. imagepng($obrazek, 'los.png');
  8. imagedestroy($obrazek);
  9. ?>

I ten kod może byćumieszczony na środku pliku ponieważnie stosuję HEADER i wtedy mogę ten napis na obrazku przypisać do
  1. <input type="hidden" name="tekst z obrazka" value="$los">
oczywiście przesłane POSTem
można takie coś stosować questionmark.gif
wielokropek
To bez sensu, bo można stworzyć robota, który odczyta jaka jest zawartość polu hidden. Ja to rozwiązałem w taki sposób:

  1. <?php
  2. function create_token() {
  3. $token_id = rand(0,99999);
  4. $date = time() - 600;
  5. mysql_query("DELETE FROM tokens WHERE token_date<'".$date."'");
  6. mysql_query("INSERT INTO tokens (token_id, token_pass, token_date) VALUES ('".$token_id."', '".rand(1000,9999)."', '".time()."')");
  7.  
  8. return $token_id;
  9. }
  10.  
  11. function check_token($pass, $id) {
  12.  $wykonaj = mysql_query("SELECT token_pass FROM tokens WHERE token_id='".$id."' LIMIT 1");
  13.  $wiersz = mysql_fetch_array($wykonaj);
  14.  mysql_query("DELETE FROM tokens WHERE token_id='".$id."'");
  15.  
  16.  if ($pass == $wiersz['token_pass']) return true;
  17.  else return false;
  18. }
  19. ?>


w miejscu gdzie ma sie pojawić obrazek:
  1. <img src="token.php?id=<? echo create_token(); ?>" alt="">


i plik który go obsługuje: token.php
  1. <?
  2. include 'includes/configure.php';
  3. include 'includes/app_top.php';
  4.  $wykonaj = mysql_query("SELECT token_pass FROM tokens WHERE token_id='".$HTTP_GET_VARS['id']."' LIMIT 1");
  5.  $wiersz = mysql_fetch_array($wykonaj);
  6.  
  7. $tekst2 = rand(1000,9999);
  8. $tekst = $wiersz['token_pass'];
  9. $czcionki= array('includes/fonts/freemono.ttf'); //definiujemy czcionki za pomocą tablicy
  10. header("Content-type: image/png"); //ustawiamy nagłówek HTTP na obrazek png
  11. $obraz = ImageCreate(100, 20); //tworzymy obrazek o wysokości 40 i szerokości 250
  12. $kolor['1'] = ImageColorAllocate($obraz, 255, 255, 255); //definiujemy kolor 1 (biały)
  13. $kolor['2'] = ImageColorAllocate($obraz, 169, 169, 169); //definiujemy kolor 2 (darkgray)
  14. $kolor['3'] = ImageColorAllocate($obraz, 220, 220, 220); //definiujemy kolor 3 (gainsboro)
  15. ImageFilledRectangle($obraz, 0, 0, 300, 50, $kolor['1']); 
  16. ImageFilledArc($obraz, 25, 25, 40, 40, 180, 360, $kolor['3'], 1);
  17. for($i = 0; $i < 60; $i++) //w pętli
  18. {
  19. imageellipse($obraz, rand(0, 250), rand(0, 40), rand(2, 30), rand(2, 30), $kolor['2']); 
  20. //tworzymy losowo rozmieszczone elipsy o kolorze darkgray
  21. }
  22. for($i = 0; $i < 3; $i++)
  23. {
  24. ImageTTFText($obraz, rand(15,20), 0, rand(15,20), rand(15,20), $kolor['3'],
  25.  $czcionki[rand(0, count($czcionki) - 1)], $tekst2); 
  26. //dodajemy do rysunku tekst o losowym położeniu, kolorze gainsboro, losowej czcion
    ce (losowanej z tablicy)
  27. } 
  28. ImageTTFText($obraz, rand(15,20), 0, rand(15,20), rand(15,20), $kolor['2'],
  29.  $czcionki[rand(0, count($czcionki) - 1)], $tekst); 
  30. //dodajemy do rysunku tekst o losowym położeniu, kolorze darkgray, losowej 
  31. //czcionce (losowanej z tablicy) oraz tekście, który przekażemy za pomocą sesji
  32.  
  33. Imagepng($obraz); //wyświetlamy obrazek za pomocą funkcji ImagePNG
  34. ImageDestroy($obraz); //niszczymy identyfikator pliku
  35. include 'includes/app_bottom.php';
  36. ?>


sprawdzamy czy dobrze ktoś wpisał tak:
  1. <?php
  2. if (check_token($HTTP_POST_VARS['token_code'], $HTTP_POST_VARS['token_id'])) 
  3. ...
  4. ?>
Hacker
ee...
Nie lepiej na sesjach??
biggrin.gif tongue.gif
Do sesji wrzucasz to co się wylosowało z obrazka nawet z zewnętrznego pliku
Guest
Cytat(Hacker @ 2006-04-30 07:13:34)
ee...
Nie lepiej na sesjach??
biggrin.gif tongue.gif
Do sesji wrzucasz to co się wylosowało z obrazka nawet z zewnętrznego pliku

Może i łatwiej ale jak się zastosuje sesje to wtedy strony nie darady oglądać w trybie Offline sad.gif
Hacker
eeee...
o ile wiem to obrazek generuje php, a więc i tak nie można by oglądać tego offline tongue.gif
chyba że ktoś ma na localu server i ściągnie źródełka, a propo po co formularz offline??
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.