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
<? include('db.php'); { $t=http://www.php.net/time(); // Create a destination $dest = "images_new/".http://www.php.net/date("Y_m_d_H").".jpg"; // Get contents from original spot $im = imagecreatefromjpeg("images/mapa_new2018a1.jpg"); $white = imagecolorallocate($im, 255, 255, 255); $red = imagecolorallocate($im, 255, 0, 0); // Save to disk in the new spot and name $dzien["Monday"] = "Poniedziałek"; $dzien["Tuesday"] = "Wtorek"; $dzien["Wednesday"] = "Środa"; $dzien["Thursday"] = "Czwartek"; $dzien["Friday"] = "Piątek"; $dzien["Saturday"] = "Sobota"; $dzien["Sunday"] = "Niedziela"; $result = $mysqli->query("SELECT * FROM dane WHERE id_miasto =1 ORDER BY id DESC LIMIT 1"); while ( $row = mysqli_fetch_array($result) ) { $text = 'Temperatura powietrza na wysokości 2m. '.$row['czas'].' '.$row['godzina'].''; $tempmax = ''.$row['temp'].'şC'; } $result = $mysqli->query("SELECT * FROM dane WHERE id_miasto =19 ORDER BY id DESC LIMIT 1"); while ( $row = mysqli_fetch_array($result) ) { $tempmax1 = ''.$row['temp'].'şC'; } // Replace path by your own font path $font = 'arial.ttf'; imagettftext($im, 34, 0, 14, 69, $white, $font, $text); imagettftext($im, 33, 0, 986, 227, $red, $font, $tempmax); //darłowo imagettftext($im, 33, 0, 193, 891, $red, $font, $tempmax1); //szczecin imagejpeg($im,$dest, 100); // Destroy image imagedestroy($im); } ?>
http://www.php.net/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) }
Używasz czasem Google?
https://www.google.com/search?q=php%20gd%20text%20shadow
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
<? include('db.php'); { $t=http://www.php.net/time(); // Create a destination $dest = "images_new/".http://www.php.net/date("Y_m_d_H").".jpg"; // Get contents from original spot $im = imagecreatefromjpeg("images/mapa_new2018a1.jpg"); $white = imagecolorallocate($im, 255, 255, 255); $red = imagecolorallocate($im, 255, 0, 0); $yellow = imagecolorallocate($im, 223, 217, 0); // Save to disk in the new spot and name $dzien["Monday"] = "Poniedziałek"; $dzien["Tuesday"] = "Wtorek"; $dzien["Wednesday"] = "Środa"; $dzien["Thursday"] = "Czwartek"; $dzien["Friday"] = "Piątek"; $dzien["Saturday"] = "Sobota"; $dzien["Sunday"] = "Niedziela"; $result = $mysqli->query("SELECT * FROM dane WHERE id_miasto =1 ORDER BY id DESC LIMIT 1"); while ( $row = mysqli_fetch_array($result) ) { $text = 'Temperatura powietrza na wysokości 2m. '.$row['czas'].' '.$row['godzina'].''; $tempmax = ''.$row['temp'].'şC'; } $result = $mysqli->query("SELECT * FROM dane WHERE id_miasto =19 ORDER BY id DESC LIMIT 1"); while ( $row = mysqli_fetch_array($result) ) { $tempmax1 = ''.$row['temp'].'şC'; } // Replace path by your own font path $font = 'arial.ttf'; imagettftext($im, 34, 0, 14, 69, $white, $font, $text); imagettftext($im, 36, 0, 984, 227, $black, $fontt, $tempmax); //darłowo imagettftext($im, 36, 0, 988, 227, $black, $fontt, $tempmax); //darłowo imagettftext($im, 36, 0, 986, 225, $black, $fontt, $tempmax); //darłowo imagettftext($im, 36, 0, 986, 229, $black, $fontt, $tempmax); //darłowo imagettftext($im, 36, 0, 986, 227, $yellow, $fontt, $tempmax); //darłowo imagettftext($im, 33, 0, 193, 891, $red, $font, $tempmax1); //szczecin imagejpeg($im,$dest, 100); // Destroy image imagedestroy($im); } ?>
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.
A więc tak mam kod taki
<? include('db.php'); { $t=http://www.php.net/time(); // Create a destination $dest = "images_new/test.jpg"; // Get contents from original spot $im = imagecreatefromjpeg("images/mapa_new2018a1.jpg"); //imagecopy($im, $image, 0, 0, 20, 13, 80, 40); $white = imagecolorallocate($im, 255, 255, 255); $grey = imagecolorallocate($im, 90, 202, 72); $black = imagecolorallocate($im, 55, 55, 55); $blue = imagecolorallocate($im, 79, 166, 245); $red = imagecolorallocate($im, 255, 0, 0); $bluemin = imagecolorallocate($im, 0, 90, 224); $yellow = imagecolorallocate($im, 248, 240, 0); $pomapancz = imagecolorallocate($im, 231, 168, 0); $result = $mysqli->query("SELECT * FROM dane WHERE id_miasto =1 ORDER BY id DESC LIMIT 1"); while ( $row = mysqli_fetch_array($result) ) { $text = 'Temperatura powietrza na wysokości 2m. '.$row['czas'].' '.$row['godzina'].''; $tempmax = ''.$row['temp'].''; } $result = $mysqli->query("SELECT * FROM dane WHERE id_miasto =19 ORDER BY id DESC LIMIT 1"); while ( $row = mysqli_fetch_array($result) ) { $tempmax1 = ''.$row['temp'].''; } // Replace path by your own font path $new_font = 'ariblk.ttf'; $fontt = 'ARLRDBD.TTF'; $font = 'arial.ttf'; imagettftext($im, 36, 0, 987, 228, $black, $new_font, $tempmax); //darłowo imagettftext($im, 36, 0, 985, 226, $black, $new_font, $tempmax); //darłowo imagettftext($im, 36, 0, 986, 227, $yellow, $new_font, $tempmax); //darłowo imagettftext($im, 36, 0, 255, 861, $black, $new_font, $tempmax1); //szczecin imagettftext($im, 36, 0, 253, 859, $black, $new_font, $tempmax1); //szczecin imagettftext($im, 36, 0, 254, 860, $yellow, $new_font, $tempmax1); //szczecin imagejpeg($im,$dest, 100); // Destroy image imagedestroy($im); }
Który obrys?
żółtych cyfr na mapie 8.8 i 7.1
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?
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?
function imagettfstroketext(&$image, $size, $angle, $x, $y, &$textcolor, &$strokecolor, $fontfile, $text, $px) { for($c1 = ($x-http://www.php.net/abs($px)); $c1 <= ($x+http://www.php.net/abs($px)); $c1++) for($c2 = ($y-http://www.php.net/abs($px)); $c2 <= ($y+http://www.php.net/abs($px)); $c2++) $bg = imagettftext($image, $size, $angle, $c1, $c2, $strokecolor, $fontfile, $text); return imagettftext($image, $size, $angle, $x, $y, $textcolor, $fontfile, $text); } $font_color = imagecolorallocate($im, 255, 255, 255); $stroke_color = imagecolorallocate($im, 0, 0, 0); imagettfstroketext($im, 60, 10, 300, 130, $font_color, $stroke_color, $fontt, "TU TWÓJ TEKST", 2);
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)