downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

imagefttext> <imagefontwidth
Last updated: Fri, 13 Nov 2009

view this page in

imageftbbox

(PHP 4 >= 4.0.7, PHP 5)

imageftbboxBir FreeType2 yazı tipi ile yazılacak bir metnin çerçevesini hesaplar

Açıklama

array imageftbbox ( float $boyut , float $açı , string $yazıtipi , string $metin [, array $ekbilgi ] )

Bu işlev, bir FreeType2 yazı tipi ile yazılacak bir metnin çerçevesini hesaplar.

Değiştirgeler

boyut

Yazı tipi boyutu. Birimi kullandığınız GD sürümüne bağlıdır. GD1 için piksel, GD2 için punto olarak belirtilir.

açı

Metnin yazım açısı.

yazıtipi

FreeType2 yazı tipi dosyasının ismi. Bir URL olarak belirtilebilir. PHP'nin kullandığı GD kütüphanesinin sürümüne bağlı olarak, / ile başlamayan bir FreeType2 dosya ismine .ttf uzantısı eklenir ve kütüphane bu dosya ismini kütüphanede tanımlı dizinlerde arar.

metin

Çerçevesi hesaplanacak metin.

ekbilgi

ekbilgi için olası dizi indisleri
Anahtar Türü Anlamı
linespacing float Satırlar arasındaki boşluğu tanımlar.

Dönen Değerler

Metin çerçevesinin dört köşesinin koordinatlarını içeren 8 elemanlı bir dizi ile döner:

0 Sol alt köşenin X konumu
1 Sol alt köşenin Y konumu
2 Sağ alt köşenin X konumu
3 Sağ alt köşenin Y konumu
4 Sağ üst köşenin X konumu
5 Sağ üst köşenin Y konumu
6 Sol üst köşenin X konumu
7 Sol üst köşenin Y konumu

Noktalar açıdan bağımsız olarak metne görelidir. Yani, "sol üst" denince metne yatay olarak bakarkenki sol üst köşe kastedilmektedir.

Örnekler

Örnek 1 - imageftbbox() örneği

<?php
// Tuvalimizi oluşturalım
$im imagecreatetruecolor(300150);
$black imagecolorallocate($im000);
$white imagecolorallocate($im255255255);

// Artalan rengi beyaz olsun
imagefilledrectangle($im00299299$white);

// Yazı tipi dosyamızın yolu
$font './arial.ttf';

// Metin çerçevesini hesaplatalım
$bbox imageftbbox(100$font'The PHP Documentation Group');

// Metnin yazılmaya başlanacağı koordinatlar
$x $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) - 5;
$y $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;

imagefttext($im100$x$y$black$font'The PHP Documentation Group');

// Resmi çıktılayalım
header('Content-type: image/png');

imagepng($im);
imagedestroy($im);
?>

Notlar

Bilginize: Bu işlev GD'nin 2.0.1 veya sonraki sürümlerini gerektirir (2.0.28 veya sonraki sürümler önerilir).

Bilginize: Bu işlev sadece, PHP, freetype desteği (--with-freetype-dir=DİZİN seçeneği) ile derlenmişse kullanılabilir.

Sürüm Bilgisi

Sürüm: Açıklama
4.3.5 ekbilgi değiştirgesi isteğe bağlı yapıldı.



imagefttext> <imagefontwidth
Last updated: Fri, 13 Nov 2009
 
add a note add a note User Contributed Notes
imageftbbox
Johan
19-Nov-2007 03:38
For alignment i used this method:

if($align == "center" || $align == "right")
    {
        $verticaltxtspace = $backwidth - (2 * $posx);       
        $spacepositions = imagettfbbox($size, $angle, "fonts/verdanaz.ttf", " ");        
        $spacepx = $spacepositions[4] - $spacepositions[0];       
       
        // Split text in lines
        $lines = split("[\r][\n]", $text);       
        for($count = 0; $count < count($lines); $count++)
        {
            $textpositions = imagettfbbox($size, $angle, "fonts/verdanaz.ttf", $lines[$count]);           
            $textpx = $textpositions[2] - $textpositions[0];
           
            if($align == "right")
            {
                $spaces = ($verticaltxtspace - $textpx) / $spacepx;
            }
            else if($align == "center")
            {
                $spaces = (($verticaltxtspace - $textpx)/2) / $spacepx;
            }
           
            // Add spaces
            $line = $lines[$count];
            for($i = 0; $i < $spaces; $i++)
            {
                $line = " " . $line;
            }
            $lines[$count] = $line;
        }
       
        // Create new text of lines
        $text = "";
        for($count = 0; $count < count($lines); $count++)
        {
            $text .= $lines[$count] . "\r\n";
        }       
    }
   
       
    //    Draw the shadow text on de shadow
    imagettftext($background, $size, $angle, $posx, $posy, $textcolor, "fonts/verdanaz.ttf",  $text);
theo v e -2
28-Dec-2005 03:10
ah... the problem between imageftbbox() and imagefttext() lies in the mirroring of the y-axes.
Below you see, for a font-size 16 the boudingboxes of "b", "p" and "bp":
< b: w=9 h=15
b(0,-1)
b(9,-1)
b(9,-16)
b(0,-16)
< p: w=9 h=16
p(0,4)
p(9,4)
p(9,-12)
p(0,-12)
< bp: w=20 h=20
bp(0,4)
bp(20,4)
bp(20,-16)
bp(0,-16)
If drawing "bp" using imagefttext() at y=0, the the top of "bp" indeed is at y=-16, and the bottom of "bp" at y=4. (Plus or minus a pixel here and there, because at y=0 there actually is a vissible pixel.)
theo v e
28-Dec-2005 02:20
IF we accept the idea that a bouding box is returned then:
    $bbox= imageftbbox ( $size, $angle, $font, $txt);
    $width = abs($bbox[4] - $bbox[0]);
    $height = abs($bbox[1] - $bbox[5]);
may be a better kind of math. But it depends... You may want to subtract yet another '1' from both the width and the height.
But try drawing a "p" and next try a "d". Their bounding boxes differ 1 px in height. Of course the respective boxes, by  imagefttext(), are placed at a different y coordinate. I noticed that if a "p" or a "b" is drawn at (0, 30) the first character of the string actually starts on, fills, the third horizontal pixel. Also: if your image is only 30 pixels in heigth, drawing text at (0, 30) means that the bottoms parts of "p", "q", "y" and alike are somewhere else...
fernando
14-Jul-2005 08:20
imagettfbbox() returns an array with 8 elements representing four points making the bounding box of the text:

0 lower left corner, X position
1 lower left corner, Y position
2 lower right corner, X position
3 lower right corner, Y position
4 upper right corner, X position
5 upper right corner, Y position
6 upper left corner, X position
7 upper left corner, Y position

The points are relative to the text regardless of the angle, so "upper left" means in the top left-hand corner seeing the text horizontally.
groomed at users dot sf dot net
27-May-2004 07:38
ImageFTBBox returns a bounding box, not metrics, as some (most?) of the notes above seem to assume. The 8 values it returns specify the 4 corners of this bounding box. So to properly determine the width and height of a string you need to do:

$bbox = ImageFTBBox(...);
$width = abs($bbox[0]) + abs($bbox[2]); // distance from left to right
$height = abs($bbox[1]) + abs($bbox[5]); // distance from top to bottom
sectionthirty1 at yahoo dot com
22-Apr-2004 09:50
Here is a handy example I used to center "dynamic text" onto an image. 

Ex. Say you want to center a clients IP Address onto a picture. 

$ip=$_SERVER['REMOTE_ADDR'];   

$details = imageftbbox($fontsize, 0, $font, $ip, array("linespacing" => 1));

$xcoord = ($imgwidth - $details[4]) / 2;  // this will return the x coordinate centered to your specific image.  Make sure  you set $imgwidth to the width of the image you are using.     

imagettftext($image, $fontsize, 0, $xcoord, $ycoord, $fontcolor, $font, $ip);
Brian at PrintsMadeEasy dot com
07-Mar-2003 03:54
I noticed that PHP's True Type functions do not allow you to create text blocks with multiple lines that automatically adjust for alignment.  I wrote a function that will allow you to generate images with multiple lines, control the alignment, and handle rotation.  I hope it helps someone.

There was too much code to paste on this message post so you can grab it off of my webserver.  I also created an example page so that you can see the code in action.

Example Page:
http://www.PrintsMadeEasy.com/code_samples/php/text_generation.php

Download the Text file:
http://www.PrintsMadeEasy.com /code_samples/php/text_generation.txt
ta at NOSPAM dot magicsquare dot info
06-Sep-2002 04:37
i've found a work around for this situation

it seems that height is directly proportional to line spacing so you just have to apply the same factor to image height

for example :

$spacing = 0.7;
$params = array("linespacing" => $spacing);

$box = imageftbbox ($size, 0, $font, $text, $params);
$tw=$box[4]-$box[0]; //image width
$th=($box[1]-$box[5])*$spacing; //image height
phpimageftbbox at juggernaut dot com dot au
15-May-2002 04:56
This function can be used to generate right-aligned text. Just work out how wide the text image is and position it accordingly. Example:

$i_width  = 200;
$i_height = 40;

$string = "Hello World!";
$pointsize = 10;
$fontfile = "/usr/local/lib/ttf/Helve.ttf";

$im = imagecreate($i_width, $i_height);
$black = imagecolorallocate ($im, 0, 0, 0);
$white = imagecolorallocate ($im, 255, 255, 255);

$string_size = ImageFtBbox($pointsize, 0, $fontfile, $string, array("linespacing" => 1));
$s_width  = $string_size[4];
$s_height = $string_size[5];

ImageFtText($im, $pointsize, 0, $i_width - $s_width - 1,  0 - $s_height, $white, $fontfile, $string, array("linespacing" => 1));

Header ("Content-type: image/png");
ImagePNG ($im);
ImageDestroy ($im);

imagefttext> <imagefontwidth
Last updated: Fri, 13 Nov 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites