kostenloser Webspace werbefrei: lima-city


imagettfbbox()

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    ich wollte wissen, wie man mit Hilfe von den Abmessungen von imagettfbbox() einen Text genau in den oberen linken Rand eines Bildes Plazieren kann (Die Ecken m?ssten genau die Kanten des Bildes ber?hren).
    Ich hab schon versucht die Breite und H?he des Textes mit imagettfbbox() zu berechnen, jedoch waren die Abmessungen nie genau.

    mfg,
    hr
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Naja, theoretisch m?sste es gehen, aber in der Praxis geht es nur mit einfachen Schriftarten wie Arial etc.; bei anderen weicht es ab. Au?erdem k?nnen die Bilder bei unterschiedlichen Versionen der GD sowieso total unterschiedlich aussehen. Mache das Bild doch einfach 4 Pixel gr??er, oder w?re das ein Problem?
  4. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    aber wie kann ich ?berhaupt den text genau oben in der Ecke ausrichten?

    mfg,
    hr
  5. $Txt = "Text";
    $TxtFile = "fonts/font1.ttf";
    $size = "14";
    
    $textwerte = imagettfbbox($size, 0, $TxtFile, $Txt);
    $x = abs($textwerte[2]);
    $y = abs($textwerte[5]);
    $im = ImageCreate($x,$y);
    $text_color = ImageColorAllocate ($im, hexdec('0'), hexdec('0'), hexdec('0'));
    imagettftext($im, $size,0,0,0, $text_color, $TxtFile, $Txt);
    header("Content-Type: image/gif");
    imagegif($im);
    imagedestroy($im);
  6. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    das funktioniert leider nicht... der Text wird gar nicht angezeigt. Liegt das nicht daran, dass die x/y-Koordinaten die untere Ecke des Textes sind?
    Ich bin nicht sicher, aber die x/y-Koordinaten in
    imagettftext() sind ja 0 und das bedeutet nicht, dass es in der Ecke angezeigt wird.

    mfg,
    hr
  7. K?nnte sein. versuch es einfach mal mit $x und $y.

    Ansonsten musst du nat?rlich die Schriftartendatei richtig angeben.

    Edit: So funktionierts bei mir:
    $Txt = "Text";
    $TxtFile = "fonts/font1.ttf";
    $size = "16";
    $textwerte = imagettfbbox($size, 0, $TxtFile, $Txt);
    $x = abs($textwerte[2]);
    $y = abs($textwerte[5]);
    $im = ImageCreate($x,$y);
    $back_color = ImageColorAllocate ($im, hexdec('ff'), hexdec('ff'), hexdec('ff'));
    $text_color = ImageColorAllocate ($im, hexdec('0'), hexdec('0'), hexdec('0'));
    imagettftext($im, $size,0,0,$y, $text_color, $TxtFile, $Txt);
    header("Content-Type: image/gif");
    imagegif($im);
    imagedestroy($im);


    Beitrag ge?ndert am 23.04.2006 16:09 von phattek
  8. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    hast recht, die Ausrichtung stimmt genau bei y = $y - 1.
    Aber das geht ?brigens nicht mit einem Winkel, dann stimmt es wieder nicht...
    Ich versteh auch nicht richtig den Sinn der Koordinaten von imagettfbbox(), es w?re besser dass es nur H?he und Breite zur?ckliefert.

    mfg,
    hr
  9. Versuchs mal so:
    $Txt = "Text";
    $TxtFile = "fonts/font1.ttf";
    $size = "180";
    
    $textwerte = imagettfbbox($size,0,$TxtFile,$Txt);
    $im = ImageCreate($textwerte[2]-$textwerte[0],$textwerte[3]-$textwerte[5]);
    $back_color = ImageColorAllocate ($im,hexdec('ff'),hexdec('ff'),hexdec('ff'));
    $text_color = ImageColorAllocate ($im,hexdec('0'),hexdec('0'),hexdec('0'));
    imagettftext($im,$size,0,-$textwerte[0],-$textwerte[5],$text_color,$TxtFile,$Txt);
    header("Content-Type: image/gif");
    imagegif($im);
    imagedestroy($im);


    Beitrag ge?ndert am 25.04.2006 17:45 von phattek
  10. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    das funktioniert zwar richtig, jedoch nicht mit einem |Winkel| > 0.
    Das problem ist einfach, dass der zur?ckgelieferte array von imagettfbbox() so kompliziert ist.
    Man weiss ?berhaupt gar nicht welches Element welcher Gr?sse zugeh?rt.
    Weisst du das viellicht genau?

    mfg,
    hr

    Beitrag ge?ndert am 24.04.2006 01:29 von heavyraptor
  11. Eingentlich schon:

    Das Array gibt die vier Eckpunkte der Schrift jeweils mit x- und y-Wert an:

    P1{$array[0],$array[1]}
    P2{$array[2],$array[3]}
    P3{$array[4],$array[5]}
    P4{$array[6],$array[7]}

    Diese Punkte ergeben ein Rechteck, in dem sich die SChrift befindet:
    P1--------------------P2
    |..........................|
    |..........................|
    P4--------------------P3

    Verwirrend ist aber, dass die Ordinate (Y-Achse) nicht wie gew?hnlich noch oben, sondern nach unten zeigt.
    Edit: stimmt nicht ... die ordinate steht wie immer ...

    Beitrag ge?ndert am 25.04.2006 17:40 von phattek
  12. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    mir ist aufgefallen, dass einige Zahlen im Array sich auf die Grundlinie des Textes beziehen, und nicht immer an die Linie zuunterst.
    Z.B. reicht ein "y" unter die Grundlinie, sodass ein positiver Wert zur?ckgeliefert wird.
    Trotzdem funktioniert es nicht mit einem winkel != 0. Das verstehe ich irgendwie nicht.

    mfg,
    hr
  13. Also bei der Schriftart, die ich verwende geht auch ein y. Das letzte Script, was ich gpostet habe hatte noch einen Fehler, den ich oben ausgebessert habe. kannst es ja nochmal kopieren.

    Mit dem Winkel ist das so eine Sache. Gaht aber auch. ICh hab aber gerade keine Zeit das zu machen. Ich poste es sp?ter mal.
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!