[PHP] imagettftext - Text formatieren

Dieses Thema im Forum "Webentwicklung" wurde erstellt von SoulOfRussia, 3. April 2011 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 3. April 2011
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    imagettftext - Text formatieren

    Neues Projekt, neue Probleme...


    Hi Leute,
    ich programmiere gerade ein kleines Tool für einen Bekannten.
    Jetzt sieht es so aus:

    PHP:
    $size  $lang * 2 //Schriftgröße, muss später an länge und höhe änderbar sein
    $textwerte  imagettfbbox  $size 0 'font/arial.ttf' $text  );

    $textwerte [ 5 ] =  abs  $textwerte [ 5 ] );

    // DEBUG //
    echo  $textwerte [ 0 ]. "<br>" . $textwerte [ 1 ]. "<br><br>"
    echo 
    $textwerte [ 2 ]. "<br>" . $textwerte [ 3 ]. "<br><br>" ;
    echo 
    $textwerte [ 4 ]. "<br>" . $textwerte [ 5 ]. "<br><br>" ;
    echo 
    $textwerte [ 6 ]. "<br>" . $textwerte [ 7 ]. "<br><br>" ;
    // DEBUG //

    $image = imagecreate  $textwerte [ 2 ],  $textwerte [ 5 ] );
    $farbe_body = imagecolorallocate  $image 255 255 255 );
    $farbe_b  imagecolorallocate  $image 0 , 0 , 0 );
    $textwerte [ 5 ] -=  2 ;

    imagettftext  $image $size 0 4 $textwerte [ 5 ],  $farbe_b ,
                   
    'font/arial.ttf' $text  );
    imagegif  $image 'image.gif'  );
    imagedestroy  $image  );
    Ich gebe "Flugzeug" ein und ausgegeben wird:

    imagef.gif
    {img-src: //img863.imageshack.us/img863/2118/imagef.gif}


    Fragen:

    Wie krieg ich die komplette Schrift in ein Image ohne das diese unten abgeschnitten wird??
    -> Das mit dem Abschneiden ist geklärt, aber wie soll ich den Server dazu bringen das Image so groß zu machen, dass das Image mit der Schrift abschließt????


    Wie kann ich die Schriften stauchen bzw. strecken?
    Ich habe die Eingabefelder "lang" und "hoch", so man später die Länge und Höhe der Schrift eingeben kann. (Nicht proportional!!)
    Idee: Das generierte Bild nehmen, und es skalieren lassen. Aber wie?
    Problem: Die Schrift ist nie abschließend mit dem Image :/



    Fragen zum Code, einfast stellen x)

    Danke im Vorraus!
     
  2. 4. April 2011
    AW: imagettftext - Text formatieren

    Naja du hast wohl die Rückgabewerte von imagettfbbox nicht ganz richtig verstanden.

    Schau mal:
    PHP:
    $breite  abs ( $textwerte [ 2 ] -  $textwerte [ 0 ]) +  1 ;
    $hoehe   abs ( $textwerte [ 7 ] -  $textwerte [ 1 ]);
    $texty   $hoehe  $textwerte [ 1 ];

    $image  imagecreate ( $breite $hoehe );

    ..

    imagettftext ( $image $size 0 0 $texty , ...);
    Um das Bild zu strecken kannst du die funktion imagecopyresized oder imagecopyresampled verwenden, dazu eine zweite image-Instanz erstell und das Bild gestreck kopieren.

    //Edit, Sry: jou das soll $hoehe heissen

    Mfg Rushh0ur
     
  3. 4. April 2011
    AW: imagettftext - Text formatieren

    hmm.. komme mit dem $height von dir nicht klar..
    was soll das sein??
    wenn ich anstatt $height $hoch tipp, und dann in dem Eingabefeld "15" eingebe, dann kommt der Text zum Vorschein... ist aber Oben abgeschnitten...
    ich denke $height soll die Höhe der Schrift sein... kann jetzt aber nicht sehen, wo die definiert wird...

    PHP:
    <? php
    $text 
    $_POST [ 'text' ];
    $lang  $_POST [ 'lang' ];
    $hoch  $_POST [ 'hoch' ];

    if (empty(
    $_POST [ 'lang' ])){
         
    $lang  "20" ;
    }
    if (empty(
    $_POST [ 'hoch' ])){
         
    $hoch  "5" ;
    }
    if (
    $text  ==  "" ){
        
    $text  "Beispieltext" ;
    }
    else{
        
    $text  $text ;
    }

    $size  $lang * 2 ;
    $textwerte  imagettfbbox  $size 0 'font/arial.ttf' $text  );

    #$textwerte[2] += $lang;
    #$textwerte[5] = abs ( $textwerte[5] );
    #$textwerte[5] += $lang;

    #$textwerte[7] += $lang;

    $breite  abs ( $textwerte [ 2 ] -  $textwerte [ 0 ]) +  1 ;
    $hoehe   abs ( $textwerte [ 7 ] -  $textwerte [ 1 ]);
    $texty   $height  $textwerte [ 1 ];  //??? kommt da nicht $hoehe hin :/ ->Ja, kommt


    echo  $textwerte [ 0 ]. "<br>" . $textwerte [ 1 ]. "<br><br>"
    echo 
    $textwerte [ 2 ]. "<br>" . $textwerte [ 3 ]. "<br><br>" ;
    echo 
    $textwerte [ 4 ]. "<br>" . $textwerte [ 5 ]. "<br><br>" ;
    echo 
    $textwerte [ 6 ]. "<br>" . $textwerte [ 7 ]. "<br><br>" ;


    $image  imagecreate ( $breite $hoehe );
    #$image=imagecreate ( $textwerte[2], $textwerte[5] );

    $farbe_body = imagecolorallocate  $image 255 255 255 );
    $farbe_b  imagecolorallocate  $image 222 , 222 , 222 );
    #$textwerte[5] -= $lang;

    imagettftext  $image $size 0 4 $texty $farbe_b ,
                   
    'font/arial.ttf' $text  );
    imagegif  $image 'image.gif'  );
    imagedestroy  $image  );


    ?>
    _____________________ GECHECKT! __________________________


    Nun ist der Text links nicht bündig, und rechts abgeschnitten -.-
    !!Nur wenn der 4. bzw. 5. oder 6. und letzte Buchstabe ein "s" ist ^^

    Z.b. "Haus" da ist die untere "Kurve" des kleinen "s" abgeschnitten...
    bei "Tics" aber nicht ??

    Ich denke wegen der breite der einzelnen Buchstaben...
    Das lässt sich nicht vermeiden, oder???
     
  4. 4. April 2011
    AW: imagettftext - Text formatieren

    Die X- und Y-Koordinaten von imagettftext und imagettfbbox beziehen sich auf die Grundlinie.

    Dabei stehen die negativen Y-Koordinaten (imagettfbbox[5,7]) für die k-Linie, also der Abstand von Grundlinie zum oberen Rand!
    Y0 steht für die Grundlinie
    Positive Y-Koordinaten stehen für die p-Linie (imagettfbbox[1,3]) also der Abstand von Grundlinie zum unteren Rand!

    Bild


    Das heißt: Gesamthöhe der Schrift -> max(imagettfbbox[1,3]) - min(imagettfbbox[5,7])
    Höhe der Grundlinie und $y-Wert für imagettftext -> abs(min(imagettfbbox[5,7]))

    PHP:
    <? php
    $font 
    'C:\WINDOWS\Fonts\Arial.ttf' ;
    $path  'image.gif' ;
    $offsetX  4 ;
    $offsetY  4 ;


    $text  $_POST [ 'text' ] ?  $_POST [ 'text' ] :  "Weispieltext" ;
    $lang  = (integer) $_POST [ 'lang' ] ? (integer) $_POST [ 'lang' ] :  20 ;
    $hoch  = (integer) $_POST [ 'hoch' ] ? (integer) $_POST [ 'hoch' ] :  5 ;


    $size  $lang << 1 ;
    $textwerte  imagettfbbox ( $size 0 $font $text );
    $arrayX  = array( $textwerte [ 0 ],  $textwerte [ 2 ],  $textwerte [ 4 ],  $textwerte [ 6 ]);
    $arrayY  = array( $textwerte [ 1 ],  $textwerte [ 3 ],  $textwerte [ 5 ],  $textwerte [ 7 ]);

    $minX  min ( $arrayX );
    $maxX  max ( $arrayX );
    $minY  min ( $arrayY );
    $maxY  max ( $arrayY );

    $width  $maxX  $minX ;
    $height  $maxY  $minY ;


    $image  imagecreatetruecolor ( $width  + ( $offsetX << 1 ),  $height  + ( $offsetY << 1 ));
    imagefill ( $image 0 0 0x00FFFFFF );
    imagettftext ( $image $size 0 $minX  $offsetX abs ( $minY ) +  $offsetY 0x00000000 $font $text );
    imagegif ( $image $path );
    imagedestroy ( $image );
     
  5. 4. April 2011
    AW: imagettftext - Text formatieren

    Sry, jou sollte $hoehe heissen.


    Ja du Zeichnest ja erst ab den 4 Pixel:


    Mfg Rushh0ur
     
  6. 5. April 2011
    AW: imagettftext - Text formatieren

    @Echse & Rush: DANKE
    Wäre ich bei FB, würde ich euch ein "Gefällt mir" geben
     
  7. 14. April 2011
    AW: imagettftext - Text formatieren

    Dann schließ doch auch ;-P
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.