[PHP/GD] text centrieren mit php

birwac66

Well-known member
ID: 178958
L
20 April 2006
558
17
Ich würde gerne den Text auf dieser Grafik zentrieren geht das?
<?
$text = "www.klamm.de";
$pic=ImageCreate(130,30); //(breite, höhe)
$col1=ImageColorAllocate($pic,0,0,0);
$col2=ImageColorAllocate($pic,255,255,255);
ImageFilledRectangle($pic, 0, 0, 500, 30, $col2);
ImageString($pic, 3, 5, 8, $text, $col1);
Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
Header("Content-type: image/jpeg");
ImageJPEG($pic);
ImageDestroy($pic);
?>
 
ok und wie schaut der dann aus also das des zentriert i bei php.net find ich dazu nix und bei google auch ned nur das ich ihn verscheiben kann aber wenn ich den text dynamisch mache stimmt er ja wieder ned deshalb müsste hier ja ein center befehl rein.
 
Trenn deine Sätze endlich mit Punkt und Komma ab !
Ich weigere mich, das zu lesen (zu versuchen) :nö: 8O
 
Das Zentrieren übernimmst Du selber. Mit imagefontwidth() ermittelst Du die Breite eines Zeichens des angegebenen Fonts. Diesen Wert multiplizierst mit der Anzahl der auszugebenden Zeichen und erhälst somit die Gesamtbreite des Textes.

Nun folgt nur noch die Bestimmung des neuen x-Offsets:
PHP:
$x_offset = floor( ($image_width - $text_width) / 2 );
Fertig.
 
Das Zentrieren übernimmst Du selber. Mit imagefontwidth() ermittelst Du die Breite eines Zeichens des angegebenen Fonts. Diesen Wert multiplizierst mit der Anzahl der auszugebenden Zeichen und erhälst somit die Gesamtbreite des Textes.

Nun folgt nur noch die Bestimmung des neuen x-Offsets:
PHP:
$x_offset = floor( ($image_width - $text_width) / 2 );
Fertig.

ne deine variante geht ned

ok und wie schaut der dann aus?
Also das des zentriert is bei php.net find ich dazu nix und bei google auch ned. Nur das ich ihn verscheiben kann aber wenn ich den text dynamisch (hintergrundbild) mache stimmt er ja wieder ned. Deshalb müsste hier ja ein center befehl rein. Hintergrund und Text werden dynamisch nach zufall erstellt

<?php
$image_file='hintergrund.png';
$image=imagecreatefrompng($image_file);
$textcolor=imagecolorallocate($image,0,0,0);
$text='Klamm.de';
imagestring($image,2,4,16,$text,$textcolor);
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
 
Zuletzt bearbeitet:
ne deine variante geht ned
Logische Mathematik...

ok und wie schaut der dann aus?
Also das des zentriert is bei php.net find ich dazu nix und bei google auch ned. Nur das ich ihn verscheiben kann aber wenn ich den text dynamisch (hintergrundbild) mache stimmt er ja wieder ned. Deshalb müsste hier ja ein center befehl rein. Hintergrund und Text werden dynamisch nach zufall erstellt
Es gibt halt keine Funktion zum Zentrieren, ein wenig selbständig Denken muss der Programmierer dann halt doch und das ging... Moment — logischer Mathematik. ↑
 
Und ob meine Variante geht. Du warst wohl nur nicht im Stande, sie umzusetzen.

Nochmal Schritt für Schritt:

Was muss man tun, um einen Text zu zentrieren? Man muss den Abstand zum Rand auf beiden Seiten gleich gross machen.

Wie berechnet man den Abstand zum Rand? Man nimmt die vorhandene Gesamtbreite und subtrahiert davon die Breite des auszugebenden Textes. Somit weiss man, wieviel Rand gesamt übrig bleibt, wenn man den Text aufs Bild packt. Da dieser Abstand aber auf beiden Seiten des Textes sein soll, muss man ihn noch durch zwei teilen, um nur den Abstand auf einer Seite zu berechnen.

Exakt das habe ich oben auch beschrieben. Den ermittelten Wert namens $x_offset benutzst Du dann bei imagestring() als Parameter, um den Text an der richtigen x-Koordinate auszugeben.