Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Bilbioteka GD?
Forum PHP.pl > Forum > Przedszkole
bemol
Jest to przykładowy plik z funkcją ImageTTFtext:
  1. <?php
  2. // Set the content-type
  3. header("Content-type: image/png");
  4.  
  5. // Create the image
  6. $im = imagecreate(400, 30);
  7.  
  8. // Create some colors
  9. $white = imagecolorallocate($im, 255, 255, 255);
  10. $grey = imagecolorallocate($im, 128, 128, 128);
  11. $black = imagecolorallocate($im, 0, 0, 0);
  12.  
  13. // The text to draw
  14. $text = 'Testing...';
  15. // Replace path by your own font path
  16. $font = 'arial.ttf';
  17.  
  18. // Add some shadow to the text
  19. imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
  20.  
  21. // Add the text
  22. imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
  23.  
  24. // Using imagepng() results in clearer text compared with imagejpeg()
  25. imagepng($im);
  26. imagedestroy($im);
  27. ?>


Jego wyniki widać pod adresem: http://ciekawe.2lokrosno.strefa.pl/obrazek.php

Dlaczego nie wyświetla tekstu na obrazku? Z tego co wiem, serwer obsługuje Biblioteke GD, więc co jest nie tak?
Co w takim razie mogę zrobić? Chcę zabezpieczyć przed spamem pewnien formularz, więc chcę umieścić kod do przepisania.
Proszę o pomoc, będę bardzo wdzięczny, bo już od około tygodnia męczę się nad tą "drobnostką".
piotrekkr
Cytat
// Replace path by your own font path
$font = 'arial.ttf';

pytanie czy wrzuciles w ten sam folder co skrypt plik arial.ttf z czcionka??
bemol
tak, tzn zmieniłem na tahoma.ttf i wrzuciłem ją na serwer smile.gif choć arial też jest winksmiley.jpg
piotrekkr
nigdzie nie includujesz tego kodu??

moze sproboj wstawic to na samym poczatku skryptu:
  1. <?php
  2. putenv('GDFONTPATH=' . realpath('.'));
  3. ?>
bemol
niestety nic się nie zmieniło :/
mnie już trafia jak spędzam przy tym 7 h dziennie od tygodnia :/
próbowałem już 4 różnych skryptów związanych z biblioteką GD i nic :/
można zrobić to na innej zasadzie?
piotrekkr
moze zmien :
  1. <?php
  2. $im = @imagecreatetruecolor(400, 30)
  3. or die("Cannot Initialize new GD image stream");
  4. ?>
bemol
jest zmiana! obrazek zrobił się ciemny (#000000?). Tekstu nie widzę, bo zapewne też ma kolor czarny. jakieś dalsze wskazówki?
http://ciekawe.2lokrosno.strefa.pl/obrazek.php

Zmieniłem $black na $white
  1. <?php
  2. imagettftext($im, 20, 0, 10, 20, $white, $font, $text);
  3. ?>


ale dalej nic nie widac :/

jeszcze spróbuje usunąć ciasteczka smile.gif
piotrekkr
Ciasteczka nic nie dadza.
Sproboj :
  1. <?php
  2. imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
  3. imagettftext($im, 20, 0, 10, 20, $white, $font, $text);
  4. ?>

i moze zmien:
  1. <?php
  2. $im = @imagecreatetruecolor(400, 80);
  3. ?>

aha i dodaj to na poczatku:
  1. <?php
  2. putenv('GDFONTPATH=' . realpath('.'));
  3. ?>
bemol
Cytat(piotrekkr @ 1.09.2007, 21:05:24 ) *
Ciasteczka nic nie dadza.
Sproboj :
  1. <?php
  2. imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
  3. imagettftext($im, 20, 0, 10, 20, $white, $font, $text);
  4. ?>

aha i dodaj to na poczatku:
  1. <?php
  2. putenv('GDFONTPATH=' . realpath('.'));
  3. ?>


to tak jest smile.gif zmieniłem wymiary i niestety nic się nie zmieniło. kod wygląda tak:

  1. <?php
  2. putenv('GDFONTPATH=' . realpath('.'));
  3.  
  4. // Set the content-type
  5. header("Content-type: image/jpeg");
  6.  
  7. // Create the image
  8. $im = @imagecreatetruecolor(400, 80);
  9.  
  10. // Create some colors
  11. $white = imagecolorallocate($im, 255, 255, 255);
  12. $grey = imagecolorallocate($im, 128, 128, 128);
  13. $black = imagecolorallocate($im, 0, 0, 0);
  14.  
  15. // The text to draw
  16. $text = 'Testing...';
  17. // Replace path by your own font path
  18. $font = 'arialbd.ttf';
  19.  
  20. // Add some shadow to the text
  21. imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
  22.  
  23. // Add the text
  24. imagettftext($im, 20, 0, 10, 20, $white, $font, $text);
  25.  
  26. // Using imagepng() results in clearer text compared with imagejpeg()
  27. imagejpeg($im);
  28. imagedestroy($im);
  29. ?>
piotrekkr
plik z czcionka arialbd.ttf napewno jest na ftp w tym folderze?? Czasem przykladu nie brales stad http://pl2.php.net/manual/pl/function.imagettftext.phpquestionmark.gif
bemol
Przykład brałem stąd: http://www.phpmanual.yej.pl/function.imagettftext.html

Problem rozwiązany!
funckcję imagettftext zamieniłem na imagestring!

Kod teraz wygląda następująco:
  1. <?php
  2. // Set the content-type
  3. header("Content-type: image/jpeg");
  4.  
  5. // Create the image
  6. $im = @imagecreatetruecolor(400, 80);
  7.  
  8. // Create some colors
  9. $white = imagecolorallocate($im, 255, 255, 255);
  10. $grey = imagecolorallocate($im, 128, 128, 128);
  11. $black = imagecolorallocate($im, 0, 0, 0);
  12.  
  13. // The text to draw
  14. $text = 'Testing...';
  15. // Replace path by your own font path
  16.  
  17. // Add some shadow to the text
  18. imagestring($im, 5, 21, 11, $text, $grey);
  19.  
  20. // Add the text
  21. imagestring($im, 5, 20, 10, $text, $white);
  22.  
  23. // Using imagepng() results in clearer text compared with imagejpeg()
  24. imagejpeg($im);
  25. imagedestroy($im);
  26. ?>


Wynik działania: http://ciekawe.2lokrosno.strefa.pl/obrazek.php

piotrekkr dziękuję za pomoc i cierpliwość smile.gif Dodam Cię do sygnatury smile.gif
piotrekkr
Spoko tylko troche brzydka ta czcionka standardowa ja bym powalczyl zeby byla ta ttf ale jak ci wystarczy zwykla to spoko smile.gif Dobra konczy mi sie piwo ide spac biggrin.gif Narazie
bemol
Witam ponownie, mam kolejny problem sad.gif
A mianowicie w pliku obraz.php nie można umieszczać funkcji include oraz łączyć się z bazą danych, a wszystkie kody mam właśnie zapisane na DB MYSQL. Jak zrobić, żeby zmienna $text (która wyświetla tekst na obrazku) wyświetlała losowy kod z bazy ?
Poniżej dwa kody:

obraz.php
  1. <?php
  2.  header("Content-type: image/jpeg");
  3.  $obraz = ImageCreate(250, 40);
  4.  $kolor['1'] = ImageColorAllocate($obraz, 0, 0, 0);
  5.  $kolor['2'] = ImageColorAllocate($obraz, 169, 169, 169);
  6.  $kolor['3'] = ImageColorAllocate($obraz, 110, 110, 110);
  7.  $kolor['4'] = ImageColorAllocate($obraz, 248, 225, 0); 
  8.  $text = $row['1'];
  9.  $font = imagefontheight('5');
  10.  ImageFilledRectangle($obraz, 0, 0, 300, 50, $kolor['1']); 
  11.  ImageFilledArc($obraz, 25, 25, 40, 40, 180, 360, $kolor['3'], 1);
  12.  for($i = 0; $i < 320; $i++) 
  13. {
  14. imagearc($obraz, rand(0, 250), rand(0, 40), rand(6, 12), rand(6, 12), 0, 360, $kolor['2']);
  15. }
  16. for($i = 0; $i < 165; $i++) 
  17. {
  18. imagefilledellipse ( $obraz, rand(0, 250), rand(0, 40), rand(5, 10), rand(5, 10), $kolor['2'] );
  19. }
  20.  ImageString ($obraz, $font, 85, 12, $text, $kolor['4']);
  21.  
  22.  Imagejpeg($obraz);
  23.  ImageDestroy($obraz);
  24.  ?>


oraz ważna część pliku add_ciekawostka.php
  1. <?php
  2. include('connection.php');
  3. $losowy = rand(76, 10000);
  4.  
  5. $con_sql = mysql_connect(SERWER, ADMIN, PASS)
  6. or die('Brak połączenia z serwerem MySQL.');
  7. $con_db = mysql_select_db(DATEBASE) 
  8. or die('Błąd wyboru bazy danych.');
  9. $query = "SELECT id, code FROM kody WHERE id=$losowy";
  10. $result = mysql_query($que) or die ('Blad: '.mysql_error().'dla zapytania:'.$que);
  11. $row = mysql_fetch_row($result);
  12. //echo $row['1'];
  13.  
  14. echo "<table border=0 width=252 height=42>";
  15. echo "<tr>";
  16. echo "<td style=\"background: #FFFF00; color: #FF0000; font-size: 18px;\" align=left><img src=\"obraz.php\" alt=\"przepisz kod\" /></td>";
  17. echo "</tr>";
  18. echo "</table><br />";
  19. echo '<TABLE>
  20. <TR>
  21. <TD>Przepisz kod z obrazka:<br /></TD>
  22. <TD align=left><INPUT id="autor" type="text" name="kod" maxlenght="5"></TD>
  23. </TR>
  24. </TABLE>';
  25. ?>


wynik: http://ogmo.xt.pl/ciekawostki/
Zakładka dodaj smile.gif
piotrekkr
Cytat
A mianowicie w pliku obraz.php nie można umieszczać funkcji include oraz łączyć się z bazą danych, a wszystkie kody mam właśnie zapisane na DB MYSQL

Mozna includowac i uzywac baz danych bez zadnych problemow w kazdym pliku php. Wazne jest tylko (jesli generujesz obrazek) zeby nie wypisac nic za pomoca funkcji echo czy print bo wtedy skrypt przestaje generowac obraz a generuje text.

Aha co do losowego rekordu z bazy (ciekawostki) mozesz uzyc takiego zapytania:
  1. SELECT * FROM ciekawostki ORDER BY RAND() LIMIT 1 // lub LIMIT jakis inny wtedy pobierze ci wiecej niz 1 losowy rekord
bemol
gdy na początku pliku obrazek.php umieszczę linijkę:
  1. <?php
  2. include ('connection.php');
  3. ?>

to plik przestaje działać :/
Tzn obrazek się nie wyświetla, tylko napis źródła obrazku: czyli http://online-games-mu-online/ciekawostki/obrazek.php :/
piotrekkr
W takim wypadku w connection.php musi byc jakis znak poza skryptem lub jakies echo/print daj kod connection.php to moze ci powiem co nie tak.
bemol
  1. <?php
  2. DEFINE("SERWER", "*******");
  3. DEFINE("ADMIN", "*******");
  4. DEFINE("PASS", "*******");
  5. DEFINE("DATEBASE", "*******");
  6. ?>


Więc to raczej nie to ;> ... :/
piotrekkr
a wez po tym
  1. <?php
  2. $kolor['4'] = ImageColorAllocate($obraz, 248, 225, 0); 
  3.  $text = $row['1'];
  4. ?>

wstaw:
  1. <?php
  2. var_dump($text); die();
  3. ?>

i napisz co wypisalo bo tak mi sie wydaje ze to bedzie NULL :/
bemol
jak wstawie:
  1. <?php
  2. var_dump($text); die();
  3. ?>

to znów pokazuje sie zamiast obrazka, ścieżka do niego :/
nic nie wypisuje :/
piotrekkr
Wez zakomentuj header(); i sprawdz co wyswietla var_dump();
bemol
tak, wyświetla NULL sad.gif

PS. może przejdziemy na GG?
W razie czego podam swój nr: 8633811.
piotrekkr
dobra chodzi o to ze zapytanie do bazy danych nie zwraca zadnego wyniku. Mozesz to sprawdzic przez var_dump($row) powinno wypisac elementy tablicy. Twoje zapytanie zwraca null i przypisuje go do $row a imagestriong jesli wstawisz null w miejsce parametru z textem to nic ci nie wpisze. Zmien zapytanie. Napisz jakie bylo do tej pory to pomysli sie nad zmiana.

zainteresuj sie tym skryptem ladnie dziala mi wszystko i ladne robi captche:
  1. <?php
  2. putenv('GDFONTPATH=' . realpath('.'));
  3. $fontDir  = 'fonts/'; // katalog z czcionkami 
  4. $fontFiles = array('verdana.ttf', 'impact.ttf', 'comic.ttf', 'arial.ttf'); // nazwy u�ywanych plik�w czcionek
  5. $imgType  = 'png'; // format wyswietlanej grafiki (png, gif, jpeg) 
  6. $length = 6; // d�ugos� losowego ci�gu 
  7.  
  8. $backColor = '#ffffff'; // kolor t�a grafiki 
  9. $fontColor = '#2a2a2a'; // kolor czcionki 
  10. $dotsColor = '#c0c0c0'; // kolor plam ;-) 
  11.  
  12. $token = substr(md5(uniqid(time())), 0 - $length); 
  13.  
  14. for($i = 0; $i < strlen($token); $i++)
  15. { 
  16.  if(($token{$i} >= 'a' and $token{$i} <= 'z') and (rand(0, 10) > 5))
  17.  {
  18. $token{$i} = strtoupper($token{$i});
  19.  }
  20. }
  21.  
  22. $_SESSION['token'] = $token;
  23.  
  24. function make_color($img, $color)
  25. {
  26.  if(is_resource($img) and preg_match('/^#[a-f0-9]{6}$/i', $color))
  27.  {
  28. $color = substr($color, 1);
  29. $rgb = array();
  30. for($i = 0; $i < 6; $i += 2) 
  31. {
  32.  $rgb[] = (int)hexdec($color{$i}.$color{$i + 1});
  33. }
  34.  
  35. return imagecolorallocate($img, $rgb[0], $rgb[1], $rgb[2]);
  36.  }
  37.  else
  38.  {
  39. return 0; 
  40.  }
  41. } 
  42.  
  43. header('Content-type: image/'.$imgType); 
  44.  
  45. $width = strlen($token) * 15 + 10; 
  46. $height = 25; 
  47.  
  48. $img = imagecreate($width, $height); 
  49.  
  50. $back = make_color($img, $backColor); 
  51. $font = make_color($img, $fontColor); 
  52. $dots = make_color($img, $dotsColor); 
  53.  
  54. $pts = array(); 
  55.  
  56. for($i = 0; $i < round($width / 1.5); $i++) 
  57. { 
  58.  $x = rand(0, $width); 
  59.  $y = rand(0, $height); 
  60.  
  61.  if(!in_array($x.'_'.$y, $pts)) 
  62.  { 
  63. imageellipse($img, $x, $y, rand(2, 7), rand(3, 6), $dots); 
  64. $pts[] = $x.'_'.$y; 
  65.  } 
  66.  else 
  67.  { 
  68. $i--; 
  69.  } 
  70. } 
  71.  
  72. for($i = 0; $i < strlen($token); $i++) 
  73. { 
  74.  imagettftext($img, rand(14, 16), rand(-10, 10), rand(3, 5) + $i * 15, 20 + rand(-3, 3), $font, $fontDir.'/'.$fontFiles[rand(0, count($fontFiles) - 1)], $token{$i}); 
  75. } 
  76.  
  77. switch($imgType) 
  78. { 
  79.  case 'jpeg': 
  80. imagejpeg($img); 
  81. break; 
  82.  case 'gif': 
  83. imagegif($img); 
  84. break; 
  85.  default: 
  86. imagepng($img); 
  87. break; 
  88. } 
  89.  
  90. imagedestroy($img);
  91. ?>


to wstaw w obrazek.php a przy dodawaniu ciekawostki sprawdzaj czy $_SESSION['token'] == $_POST['kod_wpisany_w_formularzu'] jak tak to dodawaj jak nie to wroc do formularza. smile.gif

aha i dodaj folder fonts/ i w ten folder wrzuc czcionki wypisane w $fontFiles = array('verdana.ttf', 'impact.ttf', 'comic.ttf', 'arial.ttf') albo jakies inne tylko musisz zmienic wtedy w tej tablicy nazwy plikow
bemol
Cytat(piotrekkr @ 2.09.2007, 19:09:07 ) *
dobra chodzi o to ze zapytanie do bazy danych nie zwraca zadnego wyniku. Mozesz to sprawdzic przez var_dump($row) powinno wypisac elementy tablicy. Twoje zapytanie zwraca null i przypisuje go do $row a imagestriong jesli wstawisz null w miejsce parametru z textem to nic ci nie wpisze. Zmien zapytanie. Napisz jakie bylo do tej pory to pomysli sie nad zmiana.


Zapytanie zwraca wynik. Losuje kod prawidłowo.
umieściłem:
  1. <?php
  2. echo $row['1'];
  3. ?>

W pliku add_ciekawostki.php i wyświetlił prawidłowo, losowy kod i za każdym razem dobrze działa.

Co do tego kodu powyżej, zrobiłem jak mówiłeś i wypisuje: Obrazek {ścieżka obrazka} nie może zostać wyświetlony, ponieważ zawiera błędy.

Może jednak przejdziemy na gg i wymienimy parę opinii? smile.gif
Numer w poście powyżej smile.gif
piotrekkr
Jakie bledy zwraca ten skrypt co ci podalem bo mi ladnie dziala bez zadnych bledow.
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.