Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Obramowanie tekstu w GD
brzanek
post 8.11.2018, 08:22:03
Post #1





Grupa: Zarejestrowani
Postów: 324
Pomógł: 0
Dołączył: 8.11.2012

Ostrzeżenie: (0%)
-----


Witam mam kod w bibliotece GD i chciałbym uzyskać obramowanie tekstu w kolorze czarnym. Czy w tej funkcji jest możliwe?
Tak wygląda kod
  1. <?
  2. include('db.php');
  3. {
  4. $t=time();
  5. // Create a destination
  6. $dest = "images_new/".date("Y_m_d_H").".jpg";
  7. // Get contents from original spot
  8. $im = imagecreatefromjpeg("images/mapa_new2018a1.jpg");
  9.  
  10. $white = imagecolorallocate($im, 255, 255, 255);
  11. $red = imagecolorallocate($im, 255, 0, 0);
  12.  
  13. // Save to disk in the new spot and name
  14.  
  15. $dzien["Monday"] = "Poniedziałek";
  16. $dzien["Tuesday"] = "Wtorek";
  17. $dzien["Wednesday"] = "Środa";
  18. $dzien["Thursday"] = "Czwartek";
  19. $dzien["Friday"] = "Piątek";
  20. $dzien["Saturday"] = "Sobota";
  21. $dzien["Sunday"] = "Niedziela";
  22.  
  23. $result = $mysqli->query("SELECT * FROM dane WHERE id_miasto =1 ORDER BY id DESC LIMIT 1");
  24. while ( $row = mysqli_fetch_array($result) ) {
  25. $text = 'Temperatura powietrza na wysokości 2m. '.$row['czas'].' '.$row['godzina'].'';
  26. $tempmax = ''.$row['temp'].'şC';
  27. }
  28. $result = $mysqli->query("SELECT * FROM dane WHERE id_miasto =19 ORDER BY id DESC LIMIT 1");
  29. while ( $row = mysqli_fetch_array($result) ) {
  30. $tempmax1 = ''.$row['temp'].'şC';
  31. }
  32. // Replace path by your own font path
  33. $font = 'arial.ttf';
  34. imagettftext($im, 34, 0, 14, 69, $white, $font, $text);
  35. imagettftext($im, 33, 0, 986, 227, $red, $font, $tempmax); //darłowo
  36. imagettftext($im, 33, 0, 193, 891, $red, $font, $tempmax1); //szczecin
  37.  
  38. imagejpeg($im,$dest, 100);
  39. // Destroy image
  40. imagedestroy($im);
  41. }
  42. ?>


Włączone funkcje GD na serwerze
  1. array(12) { ["GD Version"]=> string(26) "bundled (2.1.0 compatible)" ["FreeType Support"]=> bool(true) ["FreeType Linkage"]=> string(13) "with freetype" ["GIF Read Support"]=> bool(true) ["GIF Create Support"]=> bool(true) ["JPEG Support"]=> bool(true) ["PNG Support"]=> bool(true) ["WBMP Support"]=> bool(true) ["XPM Support"]=> bool(true) ["XBM Support"]=> bool(true) ["WebP Support"]=> bool(false) ["JIS-mapped Japanese Font Support"]=> bool(false) }


Ten post edytował brzanek 8.11.2018, 08:22:50
Go to the top of the page
+Quote Post
trueblue
post 8.11.2018, 08:37:32
Post #2





Grupa: Zarejestrowani
Postów: 5 341
Pomógł: 1465
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Używasz czasem Google?
https://www.google.com/search?q=php%20gd%20text%20shadow
Go to the top of the page
+Quote Post
brzanek
post 8.11.2018, 09:23:19
Post #3





Grupa: Zarejestrowani
Postów: 324
Pomógł: 0
Dołączył: 8.11.2012

Ostrzeżenie: (0%)
-----


Ta funkcja daje cień tekstu a mi chodzi o obramowanie
Dodając do kodu kilka razy tego samego tekstu z innymi współrzędnymi nie wygląda zbyt czytelnie
  1. <?
  2. include('db.php');
  3. {
  4. $t=time();
  5. // Create a destination
  6. $dest = "images_new/".date("Y_m_d_H").".jpg";
  7. // Get contents from original spot
  8. $im = imagecreatefromjpeg("images/mapa_new2018a1.jpg");
  9.  
  10. $white = imagecolorallocate($im, 255, 255, 255);
  11. $red = imagecolorallocate($im, 255, 0, 0);
  12. $yellow = imagecolorallocate($im, 223, 217, 0);
  13.  
  14. // Save to disk in the new spot and name
  15.  
  16. $dzien["Monday"] = "Poniedziałek";
  17. $dzien["Tuesday"] = "Wtorek";
  18. $dzien["Wednesday"] = "Środa";
  19. $dzien["Thursday"] = "Czwartek";
  20. $dzien["Friday"] = "Piątek";
  21. $dzien["Saturday"] = "Sobota";
  22. $dzien["Sunday"] = "Niedziela";
  23.  
  24. $result = $mysqli->query("SELECT * FROM dane WHERE id_miasto =1 ORDER BY id DESC LIMIT 1");
  25. while ( $row = mysqli_fetch_array($result) ) {
  26. $text = 'Temperatura powietrza na wysokości 2m. '.$row['czas'].' '.$row['godzina'].'';
  27. $tempmax = ''.$row['temp'].'şC';
  28. }
  29. $result = $mysqli->query("SELECT * FROM dane WHERE id_miasto =19 ORDER BY id DESC LIMIT 1");
  30. while ( $row = mysqli_fetch_array($result) ) {
  31. $tempmax1 = ''.$row['temp'].'şC';
  32. }
  33. // Replace path by your own font path
  34. $font = 'arial.ttf';
  35. imagettftext($im, 34, 0, 14, 69, $white, $font, $text);
  36. imagettftext($im, 36, 0, 984, 227, $black, $fontt, $tempmax); //darłowo
  37. imagettftext($im, 36, 0, 988, 227, $black, $fontt, $tempmax); //darłowo
  38. imagettftext($im, 36, 0, 986, 225, $black, $fontt, $tempmax); //darłowo
  39. imagettftext($im, 36, 0, 986, 229, $black, $fontt, $tempmax); //darłowo
  40. imagettftext($im, 36, 0, 986, 227, $yellow, $fontt, $tempmax); //darłowo
  41. imagettftext($im, 33, 0, 193, 891, $red, $font, $tempmax1); //szczecin
  42.  
  43. imagejpeg($im,$dest, 100);
  44. // Destroy image
  45. imagedestroy($im);
  46. }
  47. ?>
Go to the top of the page
+Quote Post
trueblue
post 8.11.2018, 12:30:45
Post #4





Grupa: Zarejestrowani
Postów: 5 341
Pomógł: 1465
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Pokaż jakie obramowanie tekstu masz na myśli. Będzie prościej niż zgadywać.
Jeśli prostokątny blok, to być może funkcja imagettfbbox.
Go to the top of the page
+Quote Post
brzanek
post 9.11.2018, 09:21:24
Post #5





Grupa: Zarejestrowani
Postów: 324
Pomógł: 0
Dołączył: 8.11.2012

Ostrzeżenie: (0%)
-----


A więc tak mam kod taki
  1. <?
  2. include('db.php');
  3. {
  4. $t=time();
  5. // Create a destination
  6. $dest = "images_new/test.jpg";
  7. // Get contents from original spot
  8. $im = imagecreatefromjpeg("images/mapa_new2018a1.jpg");
  9.  
  10. //imagecopy($im, $image, 0, 0, 20, 13, 80, 40);
  11.  
  12. $white = imagecolorallocate($im, 255, 255, 255);
  13. $grey = imagecolorallocate($im, 90, 202, 72);
  14. $black = imagecolorallocate($im, 55, 55, 55);
  15. $blue = imagecolorallocate($im, 79, 166, 245);
  16. $red = imagecolorallocate($im, 255, 0, 0);
  17. $bluemin = imagecolorallocate($im, 0, 90, 224);
  18. $yellow = imagecolorallocate($im, 248, 240, 0);
  19. $pomapancz = imagecolorallocate($im, 231, 168, 0);
  20.  
  21. $result = $mysqli->query("SELECT * FROM dane WHERE id_miasto =1 ORDER BY id DESC LIMIT 1");
  22. while ( $row = mysqli_fetch_array($result) ) {
  23. $text = 'Temperatura powietrza na wysokości 2m. '.$row['czas'].' '.$row['godzina'].'';
  24. $tempmax = ''.$row['temp'].'';
  25. }
  26. $result = $mysqli->query("SELECT * FROM dane WHERE id_miasto =19 ORDER BY id DESC LIMIT 1");
  27. while ( $row = mysqli_fetch_array($result) ) {
  28. $tempmax1 = ''.$row['temp'].'';
  29. }
  30. // Replace path by your own font path
  31. $new_font = 'ariblk.ttf';
  32. $fontt = 'ARLRDBD.TTF';
  33. $font = 'arial.ttf';
  34. imagettftext($im, 36, 0, 987, 228, $black, $new_font, $tempmax); //darłowo
  35. imagettftext($im, 36, 0, 985, 226, $black, $new_font, $tempmax); //darłowo
  36. imagettftext($im, 36, 0, 986, 227, $yellow, $new_font, $tempmax); //darłowo
  37. imagettftext($im, 36, 0, 255, 861, $black, $new_font, $tempmax1); //szczecin
  38. imagettftext($im, 36, 0, 253, 859, $black, $new_font, $tempmax1); //szczecin
  39. imagettftext($im, 36, 0, 254, 860, $yellow, $new_font, $tempmax1); //szczecin
  40.  
  41. imagejpeg($im,$dest, 100);
  42. // Destroy image
  43. imagedestroy($im);
  44. }

Po wywołaniu pojawia mi się taki obrazek

Chciałbym oby obry był szerszy i bardziej widoczny (może jeszcze do tego dodać cień z prawej strony od dołu)
Go to the top of the page
+Quote Post
trueblue
post 9.11.2018, 09:45:00
Post #6





Grupa: Zarejestrowani
Postów: 5 341
Pomógł: 1465
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Który obrys?
Go to the top of the page
+Quote Post
brzanek
post 9.11.2018, 10:05:35
Post #7





Grupa: Zarejestrowani
Postów: 324
Pomógł: 0
Dołączył: 8.11.2012

Ostrzeżenie: (0%)
-----


żółtych cyfr na mapie 8.8 i 7.1
Go to the top of the page
+Quote Post
trueblue
post 9.11.2018, 10:12:18
Post #8





Grupa: Zarejestrowani
Postów: 5 341
Pomógł: 1465
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Wiesz co robi funkcja imagettftext i dlaczego powtórzona jest trzykrotnie przy jednej etykiecie temperatury?
Może gdybyś dał ich tam więcej, z różnym przesunięciem, to osiągnąłbyś efekt jaki chcesz. Czy nie?
Go to the top of the page
+Quote Post
brzanek
post 9.11.2018, 14:58:27
Post #9





Grupa: Zarejestrowani
Postów: 324
Pomógł: 0
Dołączył: 8.11.2012

Ostrzeżenie: (0%)
-----


No właśnie z początku tak myślałem hehe.
Ale pewnie jest na to inny sposób tylko jaki. Powiększając czcionkę też źle to wygląda.
To da się te obramowanie tekstu zrobić czy nie?

Ten post edytował brzanek 9.11.2018, 15:00:27
Go to the top of the page
+Quote Post
Kshyhoo
post 15.02.2019, 11:10:19
Post #10





Grupa: Opiekunowie
Postów: 3 831
Pomógł: 315
Dołączył: 4.01.2005
Skąd: że




Cytat(brzanek @ 9.11.2018, 14:58:27 ) *
To da się te obramowanie tekstu zrobić czy nie?

Cytat(trueblue @ 8.11.2018, 08:37:32 ) *
Używasz czasem Google?

Popieram i też się pytam...
  1. function imagettfstroketext(&$image, $size, $angle, $x, $y, &$textcolor, &$strokecolor, $fontfile, $text, $px) {
  2. for($c1 = ($x-abs($px)); $c1 <= ($x+abs($px)); $c1++)
  3. for($c2 = ($y-abs($px)); $c2 <= ($y+abs($px)); $c2++)
  4. $bg = imagettftext($image, $size, $angle, $c1, $c2, $strokecolor, $fontfile, $text);
  5. return imagettftext($image, $size, $angle, $x, $y, $textcolor, $fontfile, $text);
  6. }
  7.  
  8. $font_color = imagecolorallocate($im, 255, 255, 255);
  9. $stroke_color = imagecolorallocate($im, 0, 0, 0);
  10. imagettfstroketext($im, 60, 10, 300, 130, $font_color, $stroke_color, $fontt, "TU TWÓJ TEKST", 2);

Oczywiście to przykład...


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 21.03.2019 - 23:55