|
|
|
 |
Wissen ist Machtnix wissen macht auch nix |
 |
PHP schreibt in Blocksatz ins image
800XE 25.4.2008 13:08
Ich habe ein Problem! Ich möchte gerne ein Gif erstellen mit PHP, indem ein Textbereich ist, der möglichst schön ausgefüllt werden soll.
WebmasterPark
<?PHP
// parameter für TextBefehl $size=23; // FontSize ... muß man spielen und rausfinden was richtig ist $angle=0; $fontfile='abc.ttf'; $text = 'Test Text fuer Ausgabe mit Formatirung wie in einem Buch ...... '; $text.= 'Test Text fuer Ausgabe_mit_Formatirung_wie_in_einem_Buch ...... '; $text.= 'ABC DEF GHI JKL MNO PQR STU VWX YZ '; $text.= 'READY';
$xsize=420; // Breite des Bilder $ysize=400; // höhe des Bildes $linec=0; $lines=8; $img = imagecreatetruecolor ($xsize , $ysize); $pen = ImageColorAllocate ($img, 0, 0,255); $pap = ImageColorAllocate ($img,128,128,128); imagefilledrectangle($img, 0, 0, $xsize, $ysize, $pap);
$border=23; // Abstand für links und rechts $yoffset=8; // Abstand oben $ysteps=30; // Pixeladdierer bei Linefeed(neueZeile) $paperpixel = $xsize-($border*2); // Breite "Schreibfeld" $spacepixel = 8; // Breite für Leerzeichen (minimum)
$tok= explode( ' ', $text ); $toks=count($tok);
function blockformat($blockformat) { global $spacepixel,$paperpixel,$pixel2out,$tok,$toki,$tok2out,$tokpixel, $border,$y,$ysteps,$yoffset,$img,$size,$angle,$pen,$fontfile; global $linec,$lines; if ( $linec++<$lines ) { $pixel2out-= $spacepixel; // letztes Leerzeichen beim Verbrauch wieder abziehen $freepixel = ( $paperpixel-$pixel2out ); // wieviele Pixel unverbraucht? if ( $toki==$tok2out ) $toki++; $wordcount = $toki-$tok2out; // Wörter Zählen $wordspaces= $wordcount-1; // Leerzeichen sind es eines weniger if ( $wordspaces && $blockformat ) $freepixels=$freepixel/$wordspaces; else $freepixels= 0; // Leerzeichenbreite $i=$tok2out; $word2out=0; $x=$border; // xPosition offset laut Rand $y+=$ysteps; // LineFeed addieren, auch bei erster Zeile, da xy Angabe für Bodenlinie while( $i<$toki ) { // Wort ausgeben // inklusive addition freipixel*wievieltes Wort // erstes Wort = Wort 0 ..... so ist das bei Arrays $wordbox=imagettftext($img, $size, $angle, $x+($freepixels*$word2out), $y+$yoffset, $pen, $fontfile, $tok[$i] ); $word2out++; $x += $tokpixel[$i]; // Breite von ausgegebenen Wort addieren //$x += $freepixels; $x += $spacepixel; // Breite für Leerzeichen addieren $i++; } /* $wordbox=imagettftext($img, $size, $angle, $x+($freepixels*$word2out), $y+$yoffset, $pen, $fontfile, " $wordbox[7] $wordbox[1]" ); */ } $tok2out=$toki; $pixel2out=0; } $pixel2out=0; $tok2out=0; // $i für aktuelles Zeilen Startwort $toki=0; // $i für aktuelles Wort while( $toki<$toks ) { $wordbox=imagettfbbox( $size, $angle, $fontfile, $tok[$toki] ); //$ysteps =$wordbox[1]; if ( !$toki ) { $ysteps=abs($wordbox[7]) * 1.5; //imagettftext($img, $size, $angle,$xsize, 40, $pen, $fontfile, abs($wordbox[7]) ); } $tokpixel[$toki]=$wordbox[2]; if ( $pixel2out + $wordbox[2] > $paperpixel ) { // if mit aktuellem Wort zu viel // = ausgabe ohne aktuelles Wort blockformat(1); } else { // bisheriger verbrauch an Pixeln berechnen // inklusive Platz für Leerzeichen $toki++; // WörterCounter $pixel2out += $wordbox[2]; $pixel2out += $spacepixel; } } blockformat(0); header("Content-type: image/gif"); imagegif ( $img ); ?>
Beitrag kommentieren:
|
|
Gast ····
···· Bookmark @
|