Autor Zpráva
ano
Profil *
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
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 *
super, to mě takto nenapadlo.

jediný problém je diakritika - jak to tím cyklem při utf správně procházet?
ano
Profil *
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; 
 }

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0