Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przesunięcie drugiego obrazka względem wielkości p
Forum PHP.pl > Forum > Przedszkole
babejsza
Witam,

Mam problem mianowicie przekazuje do skryptu tworzącego obrazek dwie zmienne (nie zawsze takie same i o róznych długościach):

$zmienna1 = "Witam";
$zmienna2 = "Cię Bardzo Serdecznie";

Chciałbym teraz zrobić tak, żeby obrazek ten wyświetlał napis "Witam Cię Bardzo Serdecznie", tyle że "Witam" byłoby w innym kolorze niż reszta tekstu.

Jak to zrobić questionmark.gif

Bo jedyne co mi przychodzi do głowy to wyświetlenie "witam" sprawdznie długości tego obrazka a potem dodanie drugiej części przesuniętej względem długości pierwszej. Tyle że wielkość obrazka muszę zdefiniować na początku poprzez imagecreate.

Sam skrypt obrazka w tym momencie wygląda w ten sposób:

  1. <?php
  2.  
  3. header("Content-type: image/png");
  4.  
  5. $im = imagecreate(544, 15);
  6.  
  7. $white = imagecolorallocate($im, 255, 255, 255);
  8. $grey = imagecolorallocate($im, 220, 220, 220);
  9. $grey_l = imagecolorallocate($im, 240, 240, 240);
  10. $black = imagecolorallocate($im, 44, 132, 182);
  11.  
  12. $zmienna1 = "Witam";
  13. $zmienna2 = "Cię Bardzo Serdecznie";
  14.  
  15. $text = $zmienna1." ".$zmienna2;
  16.  
  17. $font = '../font/Swz721br.ttf';
  18.  
  19. imagettftext($im, 10, 0, 1, 11, $grey_l, $font, $text);
  20. imagettftext($im, 10, 0, 2, 12, $grey, $font, $text);
  21. imagettftext($im, 10, 0, 4, 14, $grey, $font, $text);
  22. imagettftext($im, 10, 0, 5, 15, $grey_l, $font, $text);
  23. imagettftext($im, 10, 0, 3, 13, $black, $font, $text);
  24.  
  25.  
  26. imagefilter($im, IMG_FILTER_SMOOTH, 50);
  27. imagepng($im);
  28. imagedestroy($im);
  29. ?>


Ma ktoś pomysł questionmark.gif smile.gif
ToPeR
Zliczaj ilość liter w strlen($zmienna1) i o tyle razy przesuń wypisanie $zmienna2.
wszystko zależne od wielkości czcionki i kroju.

a co do imagecreate to przecież możesz najpierw wykonać obliczenia na zmienych a potem podawać mu wartości rozmiarów.

Chyba, że obrazek ma mieć stałą szerokość, to musisz wyliczać sobie ile liter Ci się mieści i ewentualnie "łamać linię" czyli pociąć stringi i wyświetlać odpowiednio w dwóch liniach.

dorzucę kod:
  1. <?php
  2.  
  3. header("Content-type: image/png");
  4.  
  5. $zmienna1 = "Witam";
  6. $zmienna2 = "Cię Bardzo Serdecznie";
  7. $dlugosc = strlen($zmienna1);
  8.  
  9. $im = imagecreate(544, 15);
  10.  
  11. $white = imagecolorallocate($im, 255, 255, 255);
  12. $grey = imagecolorallocate($im, 220, 220, 220);
  13. $grey_l = imagecolorallocate($im, 240, 240, 240);
  14. $black = imagecolorallocate($im, 44, 132, 182);
  15.  
  16. $font = '../font/Swz721br.ttf';
  17.  
  18. imagettftext($im, 10, 0, 1, 10, $black, $font, $zmienna1);
  19. imagettftext($im, 10, 0, (4*$dlugosc), 10, $grey, $font, $zmienna2);
  20. // to 4 powyżej w nawiasie to musisz sobie sprawdzić jaką szerokość 
  21. // ma Twoja czcionką i o tym manewrować
  22.  
  23. imagefilter($im, IMG_FILTER_SMOOTH, 50);
  24. imagepng($im);
  25. imagedestroy($im);
  26.  
  27. ?>
babejsza
No nie wiem, czy liczenie liter to dobry pomysł, bo ciąg "ile" będzie znacznie krótszy niż np. "www".

W ostateczności mogę sobie poobliczać długość każdej litery. Potem rozbić string'a i wyliczyć jego długość, ale miałem raczej nadzieję na to, że jest jakiś bardziej "normalny" sposób smile.gif.
ToPeR
Jak chcesz tak dokłądnie to może pobaw się funkcją: imagettfbbox(); ?
ona Ci zwraca tablice z wspórzędnymi gdzie się kończy napis.
babejsza
Kurcze ohmy.gif Patrzyłem sobie wcześniej na tą funkcję, ale jakoś nie skojarzyłem faktu przydatności. Ehhh ... no cóż smile.gif.

Oki to może jeszcze powie mi ktoś jeszcze jak wyświetlić przy pomocy imagettftext" title="Zobacz w manualu php" target="_manual polskie czcionki questionmark.gif

Jak na razie wywala mi same krzaczki sad.gif.
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.