 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
13.11.2006, 16:16
|
#1
|
|
TP-Supporter
Registriert seit: Dec 2005
|
Text ins Bild schreiben
Hey,
ich möchte einen Text vertikal in ein Bild schreiben, aber stehe gerade auf dem Schlauch bzw schaffe es nicht!
Das folgende Script funktioniert, solange ich es horizontal schreibe; also den Winkel nicht ändere:
PHP-Code:
<?php
header('Content-type: image/png');
// Setup
$text = 'Max Mustermann';
$fontfile = 'arial.ttf';
$fontsize = 20;
$fontangle = 0;
// Ausmaße des Feldes ermitteln, den unser Text braucht
$textfield = imagettfbbox($fontsize, $fontangle, $fontfile, $text);
$text_size_x = (abs($textfield[4] - $textfield[0]) + 5);
$text_size_y = (abs($textfield[1] - $textfield[7]) + 5);
$text_pos_x = 0;
$text_pos_y = ($text_size_y - 7);
// Unser Arbeitsbild erstellen
$new_picture = imagecreate($text_size_x, $text_size_y);
// Farben bestimmen
$background_color = imagecolorallocate($new_picture, 221, 216, 209);
$text_color = imagecolorallocate($new_picture, 0, 0, 0);
imagefill($new_picture, 0, 0, $background_color);
imagettftext($new_picture, $fontsize, $fontangle, $text_pos_x, $text_pos_y, $text_color, $fontfile, $text);
// Hintergund transparent stellen
#imagecolortransparent($new_picture, $background_color);
// Ausgabe des Bildes und anschliessende Löschung aus dem Speicher
imagepng($new_picture);
imagedestroy($new_picture);
?>
Seltsamerweise funktioniert es nicht mehr, sobald ich $fontangle auf 90 stelle! Vertausche ich die X und Y Variablen (also z.B. $text_size_x und $text_size_y), wird es trotzdem nicht richtig dargestellt!?
Wo liegt der Denkfehler?
Am Besten Ihr testet es einfach selbst aus! Dazu müsstet Ihr noch die Arial Schriftartdatei in das selbe Verzeichnis wie das Script kopieren!
Danke und Gruß!!
|
|
|
15.11.2006, 07:31
|
#2
|
|
TP-Supporter
Registriert seit: Dec 2005
|
Niemand ne Ahnung? 
|
|
|
15.11.2006, 10:05
|
#3
|
|
TP-Insider
Registriert seit: Dec 2004
Ort: Braunschweig
|
Eigentlich funktioniert das Script - das siehst du ja wenn du bspw. 15 angibst .
Das Problem besteht wohl darin, dass die Funktion die Grösse der Box bei größeren Winkeln nicht mehr anpasst..
Versuch mal die Werte wie folgt anzuändern - dann funktioniert es..
PHP-Code:
$fontsize = 20; $fontangle = 90;
PHP-Code:
$text_pos_x = 100; $text_pos_y = 500; // Unser Arbeitsbild erstellen $new_picture = imagecreate(500,600);
Gruss
SteffenR
Geändert von SteffenR (15.11.2006 um 10:09 Uhr).
|
|
|
15.11.2006, 14:28
|
#4
|
|
TP-Supporter
Registriert seit: Dec 2005
|
Ah ok, ich verstehe schonmal das Problem ein bischen besser. Ich habe´den Code nun wie folgt geändert:
PHP-Code:
<?php header('Content-type: image/png');
// Setup $text = 'Björn'; $fontfile = 'arial.ttf'; $fontsize = 10; $fontangle = 90; // Ausmaße des Feldes ermitteln, den unser Text braucht $textfield = imagettfbbox($fontsize, 0, $fontfile, $text); $text_size_x = (abs($textfield[4] - $textfield[0]) + 5); $textfield = imagettfbbox($fontsize, $fontangle, $fontfile, $text); $text_size_y = (abs($textfield[1] - $textfield[7]) + 5); $text_pos_x = 12; $text_pos_y = ($text_size_y + 27.4);
// Unser Arbeitsbild erstellen $new_picture = imagecreate(17, $text_size_x); // Farben bestimmen $background_color = imagecolorallocate($new_picture, 221, 216, 209); $text_color = imagecolorallocate($new_picture, 0, 0, 0); imagefill($new_picture, 0, 0, $background_color); imagettftext($new_picture, $fontsize, $fontangle, $text_pos_x, $text_pos_y, $text_color, $fontfile, $text); // Hintergund transparent stellen #imagecolortransparent($new_picture, $background_color); // Ausgabe des Bildes und anschliessende Löschung aus dem Speicher imagepng($new_picture); imagedestroy($new_picture); ?>
Irgendwie funktioniert es noch nicht, dass die Höhe berechnet wird. Ich dachte zuerst, dass ich einfach die Breite des Textes berechne, wie wenn ich halt den Text horizontal schreibe (daher auch 0 als Angleparameter in imagettfbbox()) und benutzte dies dann einfach als y-Koordinate in imagecreate(). Aber irgendwie hat das nicht funktioniert! Der Text wurde falsch platziert ...
In meinem Code hier geht es nocht; ändere ich jedoch den Namen (dieser soll ja später dynakisch sein), dann muss ich auch gleichzeitig die Zahl in dieser Zeile ändern, damit der Text wieder richtig ins Bild geschrieben wird:
$text_pos_y = ($text_size_y + 27.4);
Aber keine Ahnung, nach welchem Schema sich die Zahl hier verändert, damit ich das dynamisch berechnen kann
Vielleicht wisst Ihr ja weiter; wäre klasse!!
Danke!
Edit: Habs!!  Die Zeile muss natürlich wie folgt lauten:
$text_pos_y = $text_size_x - 1;

Geändert von [jacky] (15.11.2006 um 14:43 Uhr).
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 06:23 Uhr.
|
 |