Autor | Zpráva | ||
---|---|---|---|
ano Profil * |
#1 · Zasláno: 19. 4. 2011, 01:05:41
Zdravím,
prosím, generuji text do obrázku, což funguje v pořádku. Potřeboval bych nějakým způsobem, aby písmo bylo posunuté vždy o 5px k sobě (tzn. aby písmenka byly blíže u sebe > úspora textu) Napadá mě buď překonvertovat nějakým způsobem ttf font - lze to? Čím to lze? Nebo nějaká funkce v PHP. Generuji klasicky přes imagettftext() Díky za pomoc. |
||
MunzarM Profil |
#2 · Zasláno: 19. 4. 2011, 07:10:32
Ahoj
Na php.net jsem našel pěknej příklad, používá funkci na změnu velikosti řádkování, a stejně tak to funguje i na mezery mezi písmeny, jen měníš X a ne Y... Takhle to funguje u mě, ale výsledek nevypadá moc hezky, musíš to poladit... <?php $image = imagecreatetruecolor(400, 80); // Create some colors $white = imagecolorallocate($image, 255, 255, 255); $black = imagecolorallocate($image, 0, 0, 0); imagefilledrectangle($image, 0, 0, 399, 79, $white); $size = 14; $angle = 1; $x = 5; $y = 20; $color = $black; $fontfile = 'arial.ttf'; $text = 'Lorem ipsum dolor sit amet'; $spacing = 0.5; imagettfmultilinetext($image, $size, $angle, $x, $y, $color, $fontfile, $text, $spacing); imagepng($image, './test1.png'); imagedestroy($image); function imagettfmultilinetext($image, $size, $angle, $x, $y, $color, $fontfile, $text, $spacing = 1) { $letters = str_split($text); for ($i = 0; $i < count($letters); $i++) { $newX = $x + ($i * $size * $spacing); imagettftext($image, $size, $angle, $newX, $y, $color, $fontfile, $letters[$i]); } return null; } ?> |
||
ano Profil * |
#3 · Zasláno: 19. 4. 2011, 09:52:30
super, to mě takto nenapadlo.
jediný problém je diakritika - jak to tím cyklem při utf správně procházet? |
||
ano Profil * |
#4 · Zasláno: 19. 4. 2011, 10:03:57
tak vyřešeno. Stačilo:
function str_split_php4_utf8($str) { // place each character of the string into and array $split=1; $array = array(); for ( $i=0; $i < strlen( $str ); ){ $value = ord($str[$i]); if($value > 127){ if($value >= 192 && $value <= 223) $split=2; elseif($value >= 224 && $value <= 239) $split=3; elseif($value >= 240 && $value <= 247) $split=4; }else{ $split=1; } $key = NULL; for ( $j = 0; $j < $split; $j++, $i++ ) { $key .= $str[$i]; } array_push( $array, $key ); } return $array; } |
||
Časová prodleva: 13 let
|
0