Michael: Schrift, Satz zentriert im generiertem Bild integrieren

Ich habe ein kleines Script das ein Bild erzeugt. In dieses soll ein Satz in unterschiedlicher Länge integriert werden. Der dann zentriert im Bild eingefügt wird.

Ich habe zwei Probleme

  1. Wie kann ich die Schrittgröße ermittel die genau die breite meines Bildes dann ist? Im Augenblick Schätze ich das ganze recht schlecht als recht ;-)

  2. Habe ich die Möglichkeit wenn es ein länger Text ist automatisch dann zwei Zeilen einzufügen?

 $text = 'Das ist ein Test'; 
 $zahl = strlen($text);
 
 if($zahl<10){$schriftgroesse = 55;}
 elseif($zahl<13){$schriftgroesse = 40;}
 elseif($zahl<16){$schriftgroesse = 30;}
 elseif($zahl<19){$schriftgroesse = 24;}
 else{$schriftgroesse = 20;}

 
 $image = imagecreate (500, 300);
 $back = ImageColorAllocate ($image, 255, 255, 255);
 $font = ImageColorAllocate ($image, 0, 0, 0);
 

 
 $einzug = 50;
 $von_oben = 160;
 
 $ausgabe=imagettfbbox ( $schriftgroesse , 0 , "font/OpenSans-ExtraBold.ttf" , $text );
 

 ImageTTFText ($image, $schriftgroesse, 0, (500-$ausgabe[2])/2, (300-$ausgabe[5])/2, $font,"font/OpenSans-ExtraBold.ttf",$text);
 header("Content-type: image/PNG");
 ImagePNG ($image);
 ImageDestroy ($image);
  1. Ich habe mit PHP noch keine Schrift in Bilder eingefügt. Kannst du die Länge der Schrift messen und danach noch eine andere Schriftgröße wählen?

    Mit Javascript mache ich das.

    Ich weiss, dass mir z.B. 500 Pixel zur Verfügung stehen. Aber auch die könnte ich aus dem Parent-Elemet auslesen:

    var breite_1 = document.getElementById( "parent" ).offsetWidth;
    

    Dann schreibe ich den Text in einen variablen Container, in dem Zeilenumbruch verboten ist (white-space:nowrap) und messe dessen Breite:

    var breite_2 = document.getElementById( "cont" ).offsetWidth;
    

    Wenn breite_2 größer als breite_1, ist die Schrift zu verkleinern und zwar:

    if ( breite_2 > breite_1 ) {
      document.getElementById( "cont" ).style.fontSize = ( breite_1 * 100 / breite_2 ) +"%";
    }
    

    Vielleicht kannst du das Verfahren nach PHP übersetzen.

    Linuchs

  2. du hast doch schon imagettfbbox()

    Diese Funktion errechnet die Größe des Bereichs für eine True-Type-Textausgabe

    und du benutzt das doch auch. Ich versteh das Problem nicht.

  3. Hallo,

    Der dann zentriert im Bild eingefügt wird.

    genau die breite meines Bildes

    Na, was denn nun? Soll der Text zentriert werden, d.h. Ränder links und rechts
    oder genau die Breite ausfüllen?

    $ausgabe=imagettfbbox ( $schriftgroesse , 0 , "font/OpenSans-ExtraBold.ttf" , $text );

    Hieraus musst du im Prinzip eine Funktion basteln, die den Text und die Bildbreite entgegennimmt und die optimale Schriftgröße ausspuckt.
    Im zweiten Schritt kann man, wenn die Schriftgröße extrem wird, zwei Zeilen einplanen.

    Gruß
    Kalk