mit PHP ein Bild erstellen
cromafi
- php
Hallo,
Ich habe mich durch die Funktionen durch gekämpft.
Per Eingabefeld kann der User ein Inserat schreiben und beim nächsten Step einzelne Wörter Fett setzen. Nun ist die Frage... Kann ich das dem Bild übergeben? Ich sehe das der HTML Tags "<b> & <strong>" nicht akzeptiert und Sie einfach so rein schreibt.
Also ich habe es nun mit dem Zeilenumbruch geschafft.
Hier noch der Code, vielleicht kann er jemandem dienen.
PHP-Code:
$modul_1 = $zeile1. "\n" .$zeile2. "\n" .$zeile3;
$im1 = imagecreate (200, 40);
$black1 = ImageColorAllocate ($im1, 0, 0, 0);
$white1 = ImageColorAllocate ($im1, 255, 255, 255);
ImageTTFText ($im1, 8, 0, 2, 10, $white1, "font/arial.ttf", $modul_1);
ImageGif ($im1);
ImageDestroy ($im1);
gruss
cromafi
Hello,
Per Eingabefeld kann der User ein Inserat schreiben und beim nächsten Step einzelne Wörter Fett setzen. Nun ist die Frage... Kann ich das dem Bild übergeben? Ich sehe das der HTML Tags "<b> & <strong>" nicht akzeptiert und Sie einfach so rein schreibt.
Also ich habe es nun mit dem Zeilenumbruch geschafft.
Hier noch der Code, vielleicht kann er jemandem dienen.PHP-Code:
$modul_1 = $zeile1. "\n" .$zeile2. "\n" .$zeile3;
$im1 = imagecreate (200, 40);
$black1 = ImageColorAllocate ($im1, 0, 0, 0);
$white1 = ImageColorAllocate ($im1, 255, 255, 255);
ImageTTFText ($im1, 8, 0, 2, 10, $white1, "font/arial.ttf", $modul_1);
ImageGif ($im1);
ImageDestroy ($im1);
Kannst Du Dich noch an Typenradschreibmaschinen erinnern?
Weißt Du, wie die Texte fett gemacht haben?
Gib Deinen Text einmal aus.
Dann verschiebe ihn um ein Pixel und gib ihn nochmal aus.
Das könnte klappen.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Kannst Du Dich noch an Typenradschreibmaschinen erinnern?
Weißt Du, wie die Texte fett gemacht haben?
Nein das war vor meiner Zeit ;)
Gib Deinen Text einmal aus.
Dann verschiebe ihn um ein Pixel und gib ihn nochmal aus.
Danke, ich weiss was Du meinst. Das Problem liegt darin das man auf die einzelnen Wörter eingehen muss.
Und zwar ein User tippt folgendes ein:
Ich <b>suche</b> eine <b>Ausbildung als Informatiker</b>.
Nun soll "suche" und "Ausbildung als Informatiker" Fett sein.
Gruss
cromafi
Hello,
Kannst Du Dich noch an Typenradschreibmaschinen erinnern?
Weißt Du, wie die Texte fett gemacht haben?Nein das war vor meiner Zeit ;)
Gib Deinen Text einmal aus.
Dann verschiebe ihn um ein Pixel und gib ihn nochmal aus.Danke, ich weiss was Du meinst. Das Problem liegt darin das man auf die einzelnen Wörter eingehen muss.
Und zwar ein User tippt folgendes ein:Ich <b>suche</b> eine <b>Ausbildung als Informatiker</b>.
Nun soll "suche" und "Ausbildung als Informatiker" Fett sein.
Ja, dann verschiebst Du die beiden eben einfach nochmal.
Das soll man berechnen können:
http://de2.php.net/manual/en/function.imagefontwidth.php
Ich weiß aber nicht, ob es funktiomniert. Ich hatte damals immer Probleme damit und nun bekomme ich die Image-Font-Funktionen gerade nicht zum Laufen, weil ich nicht weiß woher ich schnell mal eben die Fonts bekomme :-(
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Ja, dann verschiebst Du die beiden eben einfach nochmal.
Wie kann ich denn etwas Splitten mitten im Text..?
Das soll man berechnen können:
http://de2.php.net/manual/en/function.imagefontwidth.php
Ich weiß aber nicht, ob es funktiomniert. Ich hatte damals immer Probleme damit und nun bekomme ich die Image-Font-Funktionen gerade nicht zum Laufen, weil ich nicht weiß woher ich schnell mal eben die Fonts bekomme :-(
Brauchst Du Hilfe?`
Gruss
cro
Hello,
Brauchst Du Hilfe?`
Das ist eigentlich noch nicht dran, aber wenn ich es eben schnell nebenbei erledigen kann, warum nicht? Ich weiß nicht ob Fonts auf der Maschine sind und wo sie liegen könnten.
Freetype ist automatsich mit installiert worden beim Debian 4.0, als ich PHP mit GD-Lib installiert habe. Da wäre es doch blöd, wenn nicht auch ein paar Fonts dabei wären.
Aber im Moment fehlt mir da der Plan, wo die sich verstecken könnten. Ein "find" hat auch nichts gebracht.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello,
Aber im Moment fehlt mir da der Plan, wo die sich verstecken könnten. Ein "find" hat auch nichts gebracht.
weniger ist manchmal mehr.
Ich hatte nach "arial.ttf" gesucht, weil das im PHP-Beipiel benutzt wurde...
testserver:[534]/home/thomas/web/php4/Verzeichnisse/texte1# find / -name '*.ttf'
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerifCondensed.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-BoldOblique.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed-Oblique.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Bold.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-BoldOblique.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerifCondensed-Oblique.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Oblique.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed-Bold.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-Oblique.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Oblique.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerifCondensed-BoldOblique.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-ExtraLight.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed-BoldOblique.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-BoldOblique.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-Bold.ttf
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerifCondensed-Bold.ttf
So ein paar Gurkenfonts sind drauf.
Mehr habe ich leider nicht.
Ich hatte mal an die 4.000.
Nun frag mich aber nicht, wo die geblieben sind.
Man kann das Ende auch mit einem Trick ausmachen.
schreib ein Pipe-Symbol hinten dran. das kannst du dann mit
http://de2.php.net/manual/de/function.imagecolorat.php
wiedersuchen, indem Du dich von hinten herantastest.
Ab dieser Position überschreibst Du dann...
Das war damals die einzige funktionierende Möglichkeit, Texte zu verbinden...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello,
http://de2.php.net/manual/de/function.imagettfbbox.php
ich probier das mal aus, ob es jetzt funktioniert.
Du musst den Text dann natürlich wortweise zusammenbauen.
Für viele Fonts müsste es eigentlich auch eine Bold-Variante geben.
Der von mir eben ausprobierte hat beide.
?php ### writetext.php ###
$modul_1 = "Hier steht der Text |";
$im1 = imagecreate (300, 50);
$black1 = ImageColorAllocate ($im1, 0, 0, 0);
$white1 = ImageColorAllocate ($im1, 255, 255, 255);
ImageTTFText ($im1, 16, 0, 5, 20, $white1, "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed-Bold.ttf", $modul_1);
ImageTTFText ($im1, 16, 0, 5, 40, $white1, "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed.ttf", $modul_1);
header('Content-Type: image/gif');
ImageGif ($im1);
ImageDestroy ($im1);
?>
$_fontdata = array();
$_fontdata[] = imagettfbbox ( 16,0,"/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed-Bold.ttf", $modul_1);
$_fontdata[] = imagettfbbox ( 16,0,"/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed.ttf", $modul_1);
echo "<pre>\n";
echo htmlspecialchars(print_r($_fontdata,1));
echo "<pre>\n";
Damit müsstest Du etwas anfangen können.
Sieht diesmal recht gut aus...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
?php ### writetext.php ###
$modul_1 = "Hier steht der Text |";
$im1 = imagecreate (300, 50);
$black1 = ImageColorAllocate ($im1, 0, 0, 0);
$white1 = ImageColorAllocate ($im1, 255, 255, 255);
ImageTTFText ($im1, 16, 0, 5, 20, $white1, "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed-Bold.ttf", $modul_1);
ImageTTFText ($im1, 16, 0, 5, 40, $white1, "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed.ttf", $modul_1);header('Content-Type: image/gif');
ImageGif ($im1);
ImageDestroy ($im1);?>
$_fontdata = array();
$_fontdata[] = imagettfbbox ( 16,0,"/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed-Bold.ttf", $modul_1);
$_fontdata[] = imagettfbbox ( 16,0,"/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed.ttf", $modul_1);echo "<pre>\n";
echo htmlspecialchars(print_r($_fontdata,1));
echo "<pre>\n";Damit müsstest Du etwas anfangen können.
Sieht diesmal recht gut aus...
Hello Tom,
danke Dir schonmal für diese Variante, kann mir sicher schon weiterhelfen... Muss nun nur noch machen das er versteht welches Wort Fett sein soll und welches nicht!
Hello,
danke Dir schonmal für diese Variante, kann mir sicher schon weiterhelfen... Muss nun nur noch machen das er versteht welches Wort Fett sein soll und welches nicht!
Ich hatte Dir das alles eben wunderschön hier im Browser geschreiben, aber dann wollte ich noch etwas dazukopieren und alles war wieder weg... Sch.... Firefox!
Jetzt bekommst Du nur ein Beispiel, wie man es machen könnte:
<?php ### writetext.php ###
$im1 = imagecreate (500, 80);
$black1 = ImageColorAllocate ($im1, 0, 0, 0);
$white1 = ImageColorAllocate ($im1, 255, 255, 255);
$red = ImageColorAllocate ($im1, 255, 0, 0);
$_fontdata = array();
$bold = "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed-Bold.ttf";
$normal = "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansCondensed.ttf";
$string[1] = 'Hier steht ein ';
$string[2] = 'fettes';
$string[3] = ' Wort';
$_fontdata[1]= imagettfbbox ( 16,0,$normal, $string[1]);
$_fontdata[2]= imagettfbbox ( 16,0,$bold, $string[2]);
$_fontdata[3]= imagettfbbox ( 16,0,$normal, $string[3]);
$pos1 = 0;
$pos2 = $_fontdata[1][2];
$pos3 = $_fontdata[1][2] + $_fontdata[2][2];
ImageTTFText ($im1, 16, 0, $pos1, 20, $white1, $normal, $string[1]);
ImageTTFText ($im1, 16, 0, $pos2, 20, $white1, $bold, $string[2]);
ImageTTFText ($im1, 16, 0, $pos3, 20, $white1, $normal, $string[3]);
if (! headers_sent())
{
header('Content-Type: image/gif');
ImageGif ($im1);
}
ImageDestroy ($im1);
?>
eventuell musst Du noch etwas mit den Unterschneidungen herumspielen.
Wenn der Array-Index [0] negativ ist, könnte der Text um diese Anzahl Pixel weiter links anfangen.
Das ist aber eigentlich immer abhängig vom Nachbarn und daher für Dich hier nur bedingt brauchbar.
Ein e kann z.B unter ein T "drunterkriechen", ein h kann das nicht.
Wie genau das zusammenhängt, habe ich vergessen. Da gibt es aber wohl hier im Forum einen Artikel zur Typographie?
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hellow Tom...
erstmals Danke vielmal das Du dir soviel Zeit für mich nimmst...
Genau so etwas in dem Stil suche ich... Ich weiss was du mit den Verschiebungen der Pixel meinst....
Nun sehe ich das du fix eingegeben hast was Fett ist...
Stell dir mal vor...
per:
$zeile1 = $_POST['zeile_1']; kommt eine Zeile von einem Inserat...
$zeile1 = "Hallo, ich <b>suche</b> eine Ausbildung als <b>Informatiker</b>";
Ich komm einfach nicht drauf wie er verstehen kann das <b>suche</b> nun FETT geschrieben werden soll...
Weisst du was ich meine??
gruss
cro
Hello,
$zeile1 = $_POST['zeile_1']; kommt eine Zeile von einem Inserat...
$zeile1 = "Hallo, ich <b>suche</b> eine Ausbildung als <b>Informatiker</b>";
Ich komm einfach nicht drauf wie er verstehen kann das <b>suche</b> nun FETT geschrieben werden
Woher weiß denn der Browser das?
Wie wäre es mit einer String-Zerlegung?
Das ist jetzt wieder so ein Fall für "Banane" *gg*
Mit preg_match_all() in einzelne Teile zerlegen.
Von Anfang bis Ende Tag gibt immer ein Ergebniselement.
Problematisch wird das nur, wenn die Tags gekämmt vorliegen. dann bekommst Du es nur noch schwer geregelt.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Woher weiß denn der Browser das?
Wie wäre es mit einer String-Zerlegung?
Das ist jetzt wieder so ein Fall für "Banane" *gg*Mit preg_match_all() in einzelne Teile zerlegen.
Von Anfang bis Ende Tag gibt immer ein Ergebniselement.Problematisch wird das nur, wenn die Tags gekämmt vorliegen. dann bekommst Du es nur noch schwer geregelt.
Hello Tom ;)
Dieses Tool ist Step by Step....
Der User gibt davor z.B.
in 3 Zeilen (3 einzelne Eingabefelder)
Danach kommt er zum Nächsten Step er kann selber auswählen welches Wort Fett ist... per Button gelangt er denn zu der Problemseite (Inseratvorschau)
Per Variabel kommt ein <b> und so mit...!
Das Tool müsste eigentlich nur die HTML Tags umsetzen können....
Weisst du was ich meine? *gg*
gruss
cro
Moin!
Per Variabel kommt ein <b> und so mit...!
Das Tool müsste eigentlich nur die HTML Tags umsetzen können....
Es gibt in dem image-Funktionen von PHP keine, die dir das macht. Du mußt selbst aktiv werden.
Text in Bilder zu rendern ist leider eine recht mühselige Aufgabe, weil man sich um jeden Pixelscheiß selbst kümmern muß. Es gibt ja noch nicht mal einen automatischen Zeilenumbruch oder sowas wie "rechtsbündig", "zentriert" oder "Blocksatz", wenn man es nicht explizit hinprogrammiert.
- Sven Rautenberg
Hey,
Text in Bilder zu rendern ist leider eine recht mühselige Aufgabe, weil man sich um jeden Pixelscheiß selbst kümmern muß. Es gibt ja noch nicht mal einen automatischen Zeilenumbruch oder sowas wie "rechtsbündig", "zentriert" oder "Blocksatz", wenn man es nicht explizit hinprogrammiert.
Du kannst ein Textarea Feld erstellen und dort Zeile um Zeile schreiben .. Image erkennt das.. so als Info ;)
Gruss
cro
Moin!
Text in Bilder zu rendern ist leider eine recht mühselige Aufgabe, weil man sich um jeden Pixelscheiß selbst kümmern muß. Es gibt ja noch nicht mal einen automatischen Zeilenumbruch oder sowas wie "rechtsbündig", "zentriert" oder "Blocksatz", wenn man es nicht explizit hinprogrammiert.
Du kannst ein Textarea Feld erstellen und dort Zeile um Zeile schreiben .. Image erkennt das.. so als Info ;)
Zeige mir Code, und ich sage dir, was da warum passiert.
Von allein passiert nach meinem Kenntnisstand nichts. Allenfalls werden Zeilenumbrüche (CR, LF, CRLF) berücksichtigt und sorgen für eine "nächste Zeile" - ohne dass man dabei Dinge wie Zeilenabstand besonders beeinflussen könnte.
Und da eine Textarea solche Zeilenumbrüche nur liefert, wenn der Benutzer ihn extra eingibt, hilft das nicht viel.
- Sven Rautenberg
Bitte bleibt beim Thema....!
Hallo
Wie wäre es mit einer String-Zerlegung?
Für jede Zeile gibt es einen Array mit dem Feld "text" und dem Feld "bold" (entweder true oder false)
Der Text vom Start bis zur ersten Formatänderung wird das erste Element. Der Folgende Text bis zur nächsten Formatänderung wird das nächste Element...
$startposition = 0;
foreach
{
gruß Julian
Hello Julian,
ich glaube, das eigentliche Problem steckt im Zerlegeverfahren, also vermutlich einer schlauen regular Expression, die die jeweiligen Textsequenzen nebst ihren Grenzen (die Auszeichnungen) in dem Array ablegt.
Die nächste Schwierigkeitsstufe sind dann die geschachtelten und dann die gekämmten Auszeichnungen. In einer guten Typografie sollte es zwar keinen unterstrichenen, fetten Text geben, aber vielleicht doch einen kursiven in anderer Schrifttype.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello Julian,
ich glaube, das eigentliche Problem steckt im Zerlegeverfahren, also vermutlich einer schlauen regular Expression, die die jeweiligen Textsequenzen nebst ihren Grenzen (die Auszeichnungen) in dem Array ablegt.
Die nächste Schwierigkeitsstufe sind dann die geschachtelten und dann die gekämmten Auszeichnungen. In einer guten Typografie sollte es zwar keinen unterstrichenen, fetten Text geben, aber vielleicht doch einen kursiven in anderer Schrifttype.
Genau so ist es Tom... Ich habe einfach die Schwierig mit dem zerlegen und wieder zusammen fügen....
Moin!
Kannst Du Dich noch an Typenradschreibmaschinen erinnern?
Weißt Du, wie die Texte fett gemacht haben?Gib Deinen Text einmal aus.
Dann verschiebe ihn um ein Pixel und gib ihn nochmal aus.
Vollkommen überflüssig. Man nimmt einfach einen fetten Font. Das ist auch typografisch einwandfrei. Dasselbe gilt für den Fall, dass man kursiv schreiben möchte.
- Sven Rautenberg
Hello,
Kannst Du Dich noch an Typenradschreibmaschinen erinnern?
Weißt Du, wie die Texte fett gemacht haben?Gib Deinen Text einmal aus.
Dann verschiebe ihn um ein Pixel und gib ihn nochmal aus.Vollkommen überflüssig. Man nimmt einfach einen fetten Font. Das ist auch typografisch einwandfrei. Dasselbe gilt für den Fall, dass man kursiv schreiben möchte.
Und wenn man keinen fetten Font pasend zum benutzen hat?
Ich verstehe hier Deinen Einwand nicht.
Dass es oft magere und meistens fette Fonts zu den narmalen gibt, ist doch klar.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Moin!
Gib Deinen Text einmal aus.
Dann verschiebe ihn um ein Pixel und gib ihn nochmal aus.Vollkommen überflüssig. Man nimmt einfach einen fetten Font. Das ist auch typografisch einwandfrei. Dasselbe gilt für den Fall, dass man kursiv schreiben möchte.
Und wenn man keinen fetten Font pasend zum benutzen hat?
Bei Arial? Extrem unwahrscheinlich.
Ich verstehe hier Deinen Einwand nicht.
Dass es oft magere und meistens fette Fonts zu den narmalen gibt, ist doch klar.
Dann verstehe ich DEINEN Einwand nicht. Was argumentierst du denn mit "fetter Font ist vielleicht nicht da", wenn du auch genau das Gegenteil sagst?
- Sven Rautenberg