php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.08.2005, 18:48  
Gast
 
Beiträge: n/a
Standard text in bild mit zeilenumbruch

hi,

ich würde gerne text in eine bilddatei schreiben, was mir auch gelungen ist.

dumm ist nur, dass der text teilweise länger als das bild ist und abgesehen davon, dass der zeilenumbruch nicht funktioniert, bräuchte ich eine funktion, um den text bei erreichen einer gewissen länge umzubrechen..ohne dabei wörter zu zerreissen.
alternativ könnte ich auch die bilddatei vergrößern..aber da die bilddatei in eine signatur soll, wäre ein ausrutscher tödlich fürs design.

das ist der code, den ich bisher habe:

edit: aktueller stand = http://trex2003-online.de/zufallstext/img.php
edit2: wem die seltsamen zeichen auffallen: das sind die zeilenumbrüche in den txt files...
edit3: die dateien wurden im ASCII modus hochgeladen.

PHP-Code:
<?
Header
("Content-type: image/jpeg");
require 
"dir.php";

$randomfilename randdir("texte");
$randomtext join(file("texte/".$randomfilename),"\n");

   
$text "$randomtext";
   
$pic imagecreatefrompng("sig.png"); 
   
$col1=ImageColorAllocate($pic,3,3,3);
   
$col2=ImageColorAllocate($pic,255,255,255);
   
ImageFilledRectangle($pic3350030$col2);
   
ImageString($pic358$text$col1);   
   
ImageJPEG($pic);
   
ImageDestroy($pic);
?>
die zeilen zwischen header() und $text hab ich von einem script übernommen, das zufallstexte aus einem verzeichnis holt und diese in $text ausgibt.

sicherheitshalber die dir.php:

PHP-Code:
<?php

function adir($dirname) {
$handle=opendir($dirname);
$dirarray = array();
while (
$file readdir($handle))
{
if (
$file "..") {array_push($dirarray,$file);}
}
closedir($handle);
return 
$dirarray;
}

function 
randdir($dirname)
{
srand ((double) microtime() * 10000000);
$dirarray adir($dirname);
$rndfile array_rand($dirarray);
return 
$dirarray[$rndfile];
}

function 
print_array($array) {
if(
gettype($array)=="array") {
echo 
"<ul>";
while (list(
$index$subarray) = each($array) ) {
echo 
"[*]$index <code>=&</code> ";
print_array($subarray);
echo 
"";
}
echo 
"[/list]";
} else echo 
$array;
}

?>
danke
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.08.2005, 12:48  
Gast
 
Beiträge: n/a
Standard

Gibt verschiedene Möglichkeiten.

Du könntest die Textbreite der jeweiligen ermitteln und bei "überbreite" eine neue Zeile in der Bilddatei schreiben.

Oder du machst generell nach bestimmten Zeichenanzahl einen Zeilenumbruch.
Jeder Zeilenumbruch bedeutet dann eine neue Zeile in der Grafik.

Textbreite:
http://www.cix88.de/cix_php/php_graf...textbreite.php

Lange Textzeilen:
http://www.cix88.de/cix_php/php_graf...textzeilen.php

Zeilenumbruch erzeugen:
http://www.cix88.de/cix_php/php__fun...x_wordwrap.php

Vieleicht hilft es weiter.
 
Alt 21.08.2005, 23:30  
Gast
 
Beiträge: n/a
Standard

hat mir schon ne ganze menge weitergeholfen :)

ich hab jetzt bloß ein problem: das script von dir produziert ein bild und gibt es per html (über echo) aus..wenn ich das rausnehme und den header auf image stelle, bekomme ich nur einen fehler, headers already sent by (linie, auf der ich den header einfüge; idr. 2)

der vollständigkeit halber nochmal der quellcode, bzw das, was ich übrig gelassen hab ;)

PHP-Code:
<?php 
#Header("Content-type: image/jpeg");

require "dir.php";

$randomfilename randdir("texte");
$randomtext join(file("texte/".$randomfilename),"\n");

   
$TXT "$randomtext";
   
# ------------------------------------------------------------------- # 
# text formatieren 
function WRAPTEXT($text$line_len$line_break="[-]") { 
    for ( 
$puffer ""$len=strlen($text), $line_start=0$len-$line_start>$line_len;) { 
    
$line substr($text,$line_start,$line_len); 
    if ((
$pos strpos($line,$line_break)) || !strcmp(substr($line,0,strlen($line_break)),$line_break)) { 
        
$app substr($line,0,$pos).$line_break
        
$puffer .= $app
        
$line_start += strlen($app); 
        continue; 
    } 

    if ( !(
$pos=strrpos($line," ")) && strcmp($text[$line_break]," ")) { 
        
$puffer .= $line.$line_break
        
$line_start += $line_len
    } else { 
        
$puffer .= substr($line,0,$pos).$line_break
        
$line_start += $pos+1
    } 
    } 
    return 
str_replace($line_break,"".$line_break,$puffer).substr($text,$line_start); 

# ------------------------------------------------------------------- # 

# ------------------------------------------------------------------- # 
# Zeilen berechnen und höhe ermitteln 

# kleiner Trick :-) 
$TXT str_replace("\r","",$TXT); 
$TXT str_replace("\n","[-]",$TXT); 

# für alle fälle 
#if ($ANZ > 70 || $ANZ < 5) { $ANZ = 70; } 

$ANZ 80;

$st WRAPTEXT($TXT,$ANZ); 
#$st = str_replace("\r\n","[-]",$st); 
$st strip_tags($st); 

$st_ex explode("[-]",$st); 
$st_cc count($st_ex); 
#echo $st_cc; 

$FONTSIZE 3
$ZEILENSIZE $FONTSIZE + ($FONTSIZE*3); 

$BB "595"
$HH = (($st_cc+2) * $ZEILENSIZE); # + ($ZEILENSIZE*2); 
$BILD "sig.png"

# $NAME = "Spruch zum Tag "; 

# ------------------------------------------------------------------- # 


# ------------------------------------------------------------------- # 
$im imagecreate($BB,$HH); 
$WEIS ImageColorAllocate($im255255255); 
$SW ImageColorAllocate($im505050); 
$CO ImageColorAllocate($im5050200); 

ImageFillToBorder ($im000$WEIS); 

# ImageString ($im, 5, 10, 5, $NAME, $SW); 
# ImageLine ($im, 10, 23, $BB-10, 23, $SW); 

for ($i 0$i $st_cc$i++) { 
$step = (($i+1) * $ZEILENSIZE); # + $ZEILENSIZE; 
ImageString ($im$FONTSIZE10$step$st_ex[$i], $CO); 



ImagePNG($im,"$BILD"); 
ImageDestroy($im); 

echo 
"[img]$BILD[/img]"
// ---------------------------------------------------------------------------- // 

?>
ich komm einfach nicht drauf, wie das im endeffekt funktionieren soll..
das ganze kannst du dir unter http://www.trex2003-online.de/zufallstext/img2.php anschauen..das ist der aktuelle stand mit neuem ansatz ;)

noch ne frage..warum funktioniert bei dir der zeilenumbruch und beim alten script nicht?
 
Alt 22.08.2005, 06:32  
Gast
 
Beiträge: n/a
Standard

Ich sehe grad das Script ist ja "Steinalt" ...
Mal gucken ob man das vereinfachen bzw. verbessern kann.

Beim alten Script wird nur eine einzige Zeile mit ImageString erzeugt.
Mehr ist da nicht.
Deswegen hatte ich mir "damals" gedacht ImageString in eine Schleife zu packen und somit mehrere Zeilen zu machen.
 
Alt 22.08.2005, 11:20  
Gast
 
Beiträge: n/a
Standard

Vieleicht ist das Beispiel jetzt etwas besser:

PHP-Code:
<?php

 error_reporting
(E_ALL);

 
// bissel Text zum testen

 
$TXT '
 ein sack nudeln.
 the quick brown fox jumps over the lazy dog 
 the quick brown fox jumps over the lazy dog 
 the quick brown fox jumps over the lazy dog 
 '
;

 
$ANZ 30// max. Zeichen pro Zeile

 /*
 Bei der Anzahl der Zeichen pro Zeile muss man etwas probieren.
 Erst recht wenn man keine extra Schriftarten benutzt.
 Da bei diesem Beispiel nur ImageString() benutzt wird, habe ich
 zum Test mal mit der Anzahl der Zeichen gearbeitet.

 Man könnte das Script auch umschreiben und eigene Schriftarten benutzen.
 Hier dann mit ImageTTFText() arbeiten.
 Anstelle der Anzahl der Zeichen, kann hier dann die Breite der Schrift
 ermittelt werden.
 */

 // nur zur Absicherung
 
if ($ANZ 70 || $ANZ 5) { $ANZ 30; }

 
// den Text nach Zeilenumbruch aufteilen
 
$umb split("\r\n|\n\r"$TXT);

 
// array bereitstellen
 
$wort_array = array();

 
/*
 Keine schöne Methode, aber sie funktioniert.
 Der Text muss vorher etwas formatiert werden.
 Er soll zudem dort einen Zeilenumbruch bekommen,
 wo es auch nötig ist, sonst nicht.
 */

foreach($umb as $temp) {
 if ( 
strlen($temp) > $ANZ) {
  
$temp_2 split('
'
wordwrap$temp$ANZ'
'
1) );
  foreach(
$temp_2 as $sp) { $wort_array[] = trim($sp); }
 } else {
  
$wort_array[] = trim($temp);
 }
}

 
// zur Kontrolle
 // print_r($wort_array);

 /*
 Etwas komische aber mögliche Variante zur Berechnung der
 Bildhöhe, je mehr Zeilen - umso höher das Bild :-)
 */

 
$font_size 4;
 
$zeilen_höhe $font_size * ( $font_size 0.875 );
 
$zeilen_gesamt count($wort_array);

 
$BB '300'// breite des Bildes

 // höhe des Bildes
 
$HH = ($zeilen_gesamt $zeilen_höhe) + ( $zeilen_höhe ); 

  
/* ab hier die Grafik erzeugen ------------------------------------ */

 // neue Grafik erzeugen
 
$im ImageCreateTrueColor$BB$HH);

 
// Farben definieren
 
$WS ImageColorAllocate($im255255255); // weiss
 
$SW ImageColorAllocate($im505050); // grauton

 // Hintergrund mit Farbe füllen
 
ImageFill ($im00$WS);

 
// $wort_array jetzt auslesen
 
$cc 0;
 foreach( 
$wort_array as $zeile) {
  
$step $zeilen_höhe $cc++; // eine Art Zeilensprung :-)
  
ImageString ($im$font_size10$step$zeile$SW);
 }


 
/*
 Zum testen wird das Bild hier mal mit "echo" ausgegeben.
 Kann auch mittels Header() erstellt werden, dann muss allerdings
 die Header-Zeile im Script eingefügt werden.
 Ein Dateiname bei ImagePNG() ist dann auch nicht nötig.
 */

 
ImagePNG($im'$$$.png'); 
 
ImageDestroy($im); // nicht vergessen :-)

 
echo '[img]$$$.png[/img]';

?>
 
Alt 22.08.2005, 19:48  
Gast
 
Beiträge: n/a
Standard

hmm..sauber

jemand anders hat mich auf einen fehler von mir hingewiesen, der für den header-fehler verantwortlich war..
ich hab im header als content-type image/jpeg angegeben, aber ein PNG erstellt. das ältere script funktioniert also auch
beim neuen hab ich wieder das problem mit den (vorhandenen) zeilenumbrüchen; sie werden als sonderzeichen dargestellt.

Version 1: http://trex2003-online.de/zufallstext/img2.php
Version 2: http://trex2003-online.de/zufallstext/img3.php

ich bin momentan mit der ersten besser bedient

DANKE
 
Alt 23.08.2005, 05:36  
Gast
 
Beiträge: n/a
Standard

Hmmm, Version 1 und 2 wollte ich eben mir mal ansehen, aber:

Zitat:
Die Seite kann nicht angezeigt werden.
 
Alt 23.08.2005, 08:26  
Gast
 
Beiträge: n/a
Standard

ich hab gestern etwas mit .htaccess experimentiert (mod_rewrite)
jetzt gehts wieder

hab zwar alles so gemacht, wie es die mod_rewrite webseite in den tutorials erklärt, aber der einzige server, der keine fehler dabei bringt, ist mein lokaler miniserver..
 
Alt 23.08.2005, 09:02  
Gast
 
Beiträge: n/a
Standard

Jo jetzt sehe ich es auch
 
 


Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JavaScript/PHP: qooxdoo 0.7.1 - Teil 1 : Eine Einführung Zergling-new Tutorials 6 25.01.2008 10:41
CSS - Bild im div container überlappt andere container Buschdieb HTML, Usability und Barrierefreiheit 13 19.07.2007 23:17
Text um Bild herum Igäl HTML, Usability und Barrierefreiheit 4 16.02.2006 17:08
CSS - Design (clear - Problem) HTML, Usability und Barrierefreiheit 7 21.12.2005 14:55
[Erledigt] Vertikale Ausrichtung von Text auf Rollover Bild HTML, Usability und Barrierefreiheit 2 16.11.2005 14:47
Text aus der DB verteilen PHP Tipps 2007 17 16.11.2005 12:04
Designproblem: Text und Bild Sirke HTML, Usability und Barrierefreiheit 2 08.09.2005 14:59
[Erledigt] Link PHP Tipps 2005-2 10 20.07.2005 21:28
mit php ein Bild in einem Text anzeigen und mit css designen scheibo PHP Tipps 2005 3 15.05.2005 13:48
[Erledigt] Text auf Bild PHP Tipps 2005 9 28.04.2005 15:05
[Erledigt] DIV´s wollen nicht wie ich das will :-) HTML, Usability und Barrierefreiheit 22 28.03.2005 18:36
Wie kann man Text als Bild ausgeben? PHP Tipps 2005 5 22.03.2005 10:13
Text auf Bild HTML, Usability und Barrierefreiheit 6 08.02.2005 17:02
mit gd text in ein bild schreiben Sclot PHP Tipps 2004-2 4 08.12.2004 18:33
txt-Datei erstellen d-81 PHP Tipps 2004 12 11.08.2004 20:31

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
imagestring zeilenumbruch, php imagestring zeilenumbruch, php image zeilenumbruch, html halber zeilenumbruch, php image text zeilenumbruch, php bild zeilenumbruch, zeilenumbruch bild, imagestring textumbruch, halber zeilenumbruch html, halber zeilenumbruch, breite von textzeilen php, html textumbruch bild, html halber umbruch, php imagestring font size, zeilenumbruch bild und text nicht, zeilenumbruch php bild, php text in grafik mit zeilenumbruch, php schrift gd zeilenumbruch, sige einzelbild beitrag umbruch, php imagestring automatischer zeilenumbruch

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:28 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.