| 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: 15 let
|
|||
0