Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] obrazek generowany przez skrypt
Forum PHP.pl > Forum > Przedszkole
marian2299
Cześć,

piszę, dlatego że chciałbym zrobić obrazek z cytatem. Cytaty miałby się losować z pliku .txt i wyświetlać się na obrazku o określonej czcionce itp. Miałyby też być w odpowiednim miejscu, lekko z prawej strony. Wie ktoś może, jak to zrobić? <prosi o przykładowy kod>


Pozdrawiam smile.gif
M.
Kildyt
Jeżeli chcesz wygenerować obrazek z cytatem użyj GD.
Nie podamy ci przykładowego kodu (nie ten dział) ale w internecie jest pełno tutoriali o GD i nanoszeniu na obrazek tekstu.
marian2299
  1. <?php
  2. header("Content-type: image/jpeg");
  3. $obrazek = ImageCreateFromJpeg("lesmis.jpg");
  4.  
  5. $czcionka = ImageLoadFont("czcionka.ft");
  6. $kolor_tekstu = ImageColorAllocate($obrazek,0,0,0);
  7. ImageString($obrazek,$czcionka,5,5,$cytat,$kolortekstu);
  8. $cytat =
  9.  
  10. ImageJpeg($obrazek);
  11. ImageDestroy($obrazek);
  12. ?>


znalazłem mniej więcej coś takiego, ale nadal nie wiem jak wylosować cytat z pliku tekstowego...
Kildyt
No chłopie, czy google i dokumentacja boli?
Jeżeli wszystkie cytaty masz w jednym pliku to najpierw je explode-ujesz, a następnie rand-ujesz.
Daiquiri
Jeżeli oczekujesz gotowego kodu, napisz - przeniosę temat do innego działu z tagiem "wolontariat" (chyba, że dysponujesz gotówką smile.gif). W innym przypadku napisz z czym konkretnie masz problem.
marian2299
Nie za bardzo wiem, jak użyć rand w tym przypadku...

  1. <?php
  2. header("Content-type: image/jpeg");
  3. $obrazek = ImageCreateFromJpeg("lesmis.jpg");
  4.  
  5. $cytaty = "pierwszy cytat|drugi cytat|trzeci cytacik|blablabla...";
  6. $losowycytat = explode("|", $cytaty);
  7.  
  8.  
  9. $czcionka = ImageLoadFont("czcionka.ft");
  10. $kolor_tekstu = ImageColorAllocate($obrazek,0,0,0);
  11. ImageString($obrazek,$czcionka,5,5,$cytat,$kolortekstu);
  12. $cytat =
  13.  
  14. ImageJpeg($obrazek);
  15. ImageDestroy($obrazek);
  16. ?>
Kildyt
Rand po prostu losuje liczbę z podanego przedziału.
Zobacz sobie dzięki print_r co zwraca $losowycytat. Jest to tablica posiadająca ponumerowane klucze (od 0).
Więc
  1. echo $losowycytat[rand(0, count($losowycytat)-1);
zwróci losową wartość z tablicy.
Mephistofeles
Rand może zwrócić klucz nieistniejący w tablicy - dlatego istnieje array_rand, która losuje jeden lub więcej indeksów.
marian2299
" Obrazek " (..) cytaty.php" nie może zostać wyświetlony, ponieważ zawiera błędy. "

  1. <?php
  2. header("Content-type: image/jpeg");
  3. $obrazek = ImageCreateFromJpeg("lesmis.jpg");
  4.  
  5. $cytaty = "pierwszy cytat|drugi cytat|trzeci cytacik|blablabla...";
  6. $losowycytat = explode("|", $cytaty);
  7.  
  8. $losowycytat1 = $losowycytat[rand(0, count($losowycytat)-1)];
  9.  
  10.  
  11. $czcionka = ImageLoadFont("georgia.TTF");
  12. $kolor_tekstu = ImageColorAllocate($obrazek,0,0,0);
  13. ImageString($obrazek,$czcionka,5,5,$losowycytat1,$kolortekstu);
  14. ImageJpeg($obrazek);
  15. ImageDestroy($obrazek);
  16. ?>
Mephistofeles
Może BOM? Wyślij tymczasowo jako text/plain i zobacz czy generuje błędy.
Kildyt
Jakie błędy zwraca? Najpierw sprawdź czy masz zainstalowane GD (gd_info).
marian2299
GD jest zainstalowane,

text/plain mi się nie wyświetla, plik zaczyna się pobierać ;O

Okej, uzyskałem taki, działający, kod:

  1. <?php
  2. header("Content-type: image/jpeg");
  3. $obrazek = ImageCreateFromJpeg("lesmis.jpeg");
  4.  
  5. $cytaty = "Whether true or false, what is said about men often has as much influence on their lives, and particularly on their destinies, as what they do.|If the soul is left in darkness, sins will be committed. The guilty one is not he who commits the sin, but the one who causes the darkness.|In passing, we might say that success is a hideous thing. Its false similarity to merit deceives men...They confuse heaven's radiant stars with a duck's footprint left in the mud.|All things considered, sire, there is nothing to fear from these people. They are as carefree and lazy as cats. The lower classes in the provinces are restless, those in Paris are not...They are not dangerous. In sum: dependable riffraff.";
  6. $losowycytat = explode("|", $cytaty);
  7.  
  8. $losowycytat1 = $losowycytat[rand(0, count($losowycytat)-1)];
  9.  
  10.  
  11. $rozmiar = 10;
  12. $pochylenie = 0;
  13. $x = 136;
  14. $y = 35;
  15. putenv('GDFONTPATH=' . realpath('.'));
  16. $font = 'georgia.TTF';
  17. $white = imagecolorallocate($obrazek, 255, 255, 255);
  18. imagettftext($obrazek, $rozmiar, $pochylenie, $x, $y, $white, $font, $losowycytat1);
  19. ImageJpeg($obrazek);
  20. ?>


Tylko... da się jakoś sprawić, żeby tekst się zawijał?
Kildyt
Co rozumiesz przez słowo "zawijał"?
Musisz wiedzieć, że GD to nie żaden zaawansowany program graficzny i nie nadaje się on do bardzo zaawansowanych działań.
marian2299
W 'manualu' jest taki oto kod:

  1. <?php
  2. function wrap($fontSize, $angle, $fontFace, $string, $width){
  3.  
  4. $ret = "";
  5.  
  6. $arr = explode(' ', $string);
  7.  
  8. foreach ( $arr as $word ){
  9.  
  10. $teststring = $ret.' '.$word;
  11. $testbox = imagettfbbox($fontSize, $angle, $fontFace, $teststring);
  12. if ( $testbox[2] > $width ){
  13. $ret.=($ret==""?"":"\n").$word;
  14. } else {
  15. $ret.=($ret==""?"":' ').$word;
  16. }
  17. }
  18.  
  19. return $ret;
  20. }
  21. ?>
, da radę? Tylko co to jest $string, $angle ?

@Kildyt, zawijanie tekstu to przenoszenie wyrazów do kolejnych linijek...
Kildyt
Cytat(marian2299 @ 22.01.2011, 00:21:07 ) *
@Kildyt, zawijanie tekstu to przenoszenie wyrazów do kolejnych linijek...
No tak, wybacz. biggrin.gif

$string to tekst, a $angle to kąt w stopniach według którego tekst będzie mierzony (nie wiem za bardzo o co kaman, spróbuj metodą prób i błędów a samo wyjdzie).
marian2299
  1. <?php
  2. header("Content-type: image/jpeg");
  3. $obrazek = ImageCreateFromJpeg("lesmis.jpeg");
  4.  
  5. $cytaty = "Whether true or false, what is said about men often has as much influence on their lives, and particularly on their destinies, as what they do.|If the soul is left in darkness, sins will be committed. The guilty one is not he who commits the sin, but the one who causes the darkness.|In passing, we might say that success is a hideous thing. Its false similarity to merit deceives men...They confuse heaven's radiant stars with a duck's footprint left in the mud.|All things considered, sire, there is nothing to fear from these people. They are as carefree and lazy as cats. The lower classes in the provinces are restless, those in Paris are not...They are not dangerous. In sum: dependable riffraff.";
  6. $losowycytat = explode("|", $cytaty);
  7.  
  8. $losowycytat1 = $losowycytat[rand(0, count($losowycytat)-1)];
  9.  
  10. $warpText = wordwrap($losowycytat1, 37, "\n");
  11. $rozmiar = 10;
  12. $pochylenie = 0;
  13. $x = 134;
  14. $y = 35;
  15. putenv('GDFONTPATH=' . realpath('.'));
  16. $font = 'georgia.TTF';
  17. $white = imagecolorallocate($obrazek, 255, 255, 255);
  18. imagettftext($obrazek, $rozmiar, $pochylenie, $x, $y, $white, $font, $warpText);
  19. ImageJpeg($obrazek);
  20. ?>


to działa, ale jak wyjustować tekst?
Kildyt
W notatkach dla imagettftext jest gotowa funkcja do justowania.
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.