 |
| 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 |
03.05.2004, 17:32
|
#1
|
|
TP-Member
Registriert seit: Jul 2002
|
imagettftext() - Textbox ?
Hallo alle zusammen,
ich habe auf einem Bild Text platziert, nur soll dieser an einer bestimmten Stelle brechen und in einer neuen Zeile fortgesetzt werden. Wäre auch kein Problem, aber ich möchte später aus einer Textbox Inhalt übernehmen und den auf diesen Ausschnitt des Bildes projezieren. Nun muss das Script ja so sein, dass es irgendwo einen Zeilenumbruch macht wenn der "Schreibbereich" horizontal zuende ist, sonst würde der Text ja endlos nach rechts weiterlaufen. Leider weiß ich nicht wie der Befehel dafür ist. Mein bisheriger Code sieht so aus:
PHP-Code:
<?
header ("Content-type: image/PNG");
$im = ImageCreateFromJPEG("images/tafel.jpg");
$weiss = ImageColorAllocate($im, 255, 255, 255);
$schwarz = ImageColorAllocate ($im, 0, 0, 0);
ImageTTFText($im, 20, 0, 20, 40, $weiss, "Hilde.ttf", "Hier ist ein wenig Text...");
Header("Content-type: image/png");
ImagePNG($im);
ImageDestroy($im);
?>
Für Hilfe wäre ich sehr dankbar.
MfG chickendeath
|
|
|
03.05.2004, 19:17
|
#2
|
|
Guest
Registriert seit: Aug 2002
|
Helfen will ich dir mit Theorie, da Grafikanwendungen nun mal mit viel Mathe und Logik erstellt werden:
- Breite einer Schrift muss herausgefunden werden imagefontwidth()
- Breite des Bildes muss herausgefunden werden getimagesize()
Das sind die zwei Werte, die du brauchst, weiter denken tust du aber selbst. 
|
|
|
04.05.2004, 18:44
|
#3
|
|
TP-Member
Registriert seit: Jul 2002
|
Das, woran ich jetzt denke, steht aber nicht im direkten Zusammenhang mit dem Problem. Jedenfalls denke ich das.
Man muss sich es ja so vorstellen:
Großes Bild (Hintergrund auf dem geschrieben werden soll) --> Dynamischer Text wird in eine bestimmte Stelle dieses Bildes projeziert und soll automatisch brechen, falls das "Textfeld", wie ich es mal nennen möchte, dies angibt weil die Breite in dieser Zeile nicht ausreicht.
Möchtest du mir evtl. noch ein wenig auf die Sprünge helfen ?
MfG chickendeath
|
|
|
04.05.2004, 19:03
|
#4
|
|
Guest
Registriert seit: Aug 2002
|
Doch ich habe dich schon richtig verstanden, aber du mich wohl nicht...  Auf jeden Fall habe ich hier etwas für dich gefunden (unter Kommentaren) - die fertige Funktion imagestringbox(), die so funktioniert wie ich es dir zu erklären versucht habe.
Geändert von Strogij (04.05.2004 um 19:08 Uhr).
|
|
|
04.05.2004, 19:55
|
#5
|
|
TP-Member
Registriert seit: Jul 2002
|
Okay, bis hierhin möchte ich dir erstmal danken.
Ich denke nicht, beim besten Willen, dass ich so ein Script hätte selber schreiben können bezüglich dieses Zwecks.
Ich habe es auch schon ein wenig einbauene können. Aber wie sieht es aus - könnte man den TTF-Font noch irgendwie einstellen?
Der bisherige Code sieht ja so aus:
PHP-Code:
<?php
// ### CODE ###
define("ALIGN_LEFT", 0);
define("ALIGN_CENTER", 0);
define("ALIGN_RIGHT", 0);
define("VALIGN_TOP", 0);
define("VALIGN_MIDDLE", 0);
define("VALIGN_BOTTOM", 0);
function imagestringbox(&$image, $font, $left, $top, $right, $bottom, $align, $valign, $leading, $text, $color) {
// Get size of box
$height = $bottom - $top;
$width = $right - $left;
// Break the text into lines, and into an array
$lines = wordwrap($text, floor($width / imagefontwidth($font)), "\n", true);
$lines = explode("\n", $lines);
// Other important numbers
$line_height = imagefontheight($font) + $leading;
$line_count = floor($height / $line_height);
$line_count = ($line_count > count($lines)) ? (count($lines)) : ($line_count);
// Loop through lines
for ($i = 0; $i < $line_count; $i++) {
// Vertical Align
switch ($valign) {
case VALIGN_TOP: // Top
$y = $top + ($i * $line_height);
break;
case VALIGN_MIDDLE: // Middle
$y = $top + (($height - ($line_count * $line_height)) / 2) + ($i * $line_height);
break;
case VALIGN_BOTTOM: // Bottom
$y = ($top + $height) - ($line_count * $line_height) + ($i * $line_height);
break;
default:
return false;
}
// Horizontal Align
$line_width = strlen($lines[$i]) * imagefontwidth($font);
switch ($align) {
case ALIGN_LEFT: // Left
$x = $left;
break;
case ALIGN_CENTER: // Center
$x = $left + (($width - $line_width) / 2);
break;
case ALIGN_RIGHT: // Right
$x = $left + ($width - $line_width);
break;
default:
return false;
}
// Draw
imagestring($image, $font, $x, $y, $lines[$i], $color);
}
return $image;
}
// ### EXAMPLE ###
$test_string = "Hier ist ein kleiner Beispieltext, der einfach nur so geschrieben ist und eigentlich in dem Sinne gar keinen Sinn hat... :)"; // Example text
$im = imagecreate(400, 400); // Create image
// Colors
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
$grey = imagecolorallocate($im, 200, 200, 200);
// Grid so you can see
imagerectangle($im, 10, 6, 206, 300, $grey);
imagerectangle($im, 10, 6, 206, 153, $grey);
imagerectangle($im, 10, 6, 108, 300, $grey);
// Use it!
imagestringbox($im, 3, 10, 6, 206, 300, ALIGN_RIGHT, VALIGN_BOTTOM, 2, $test_string, $black);
// Output
header("Content-type: image/png");
imagepng($im);
?>
Falls du mir noch einmal erneut auf die Sprünge helfen könntest, wäre ich dir wirklich undendlich dankbar !
MfG chickendeath
Geändert von chickendeath (04.05.2004 um 19:59 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 11:16 Uhr.
|
 |