• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

PHP Frage: Text zu Bild

Begonnen von Dete, 24.08.2015, 18:06:32

⏪ vorheriges - nächstes ⏩

Dete

Hallo,

ich habe mal eine Frage zu PHP und benötige eure Hilfe.
Ich möchte mit PHP aus einer Text-Datei (.txt) ein Bild (.png) erzeugen lassen.
Das klappt auch soweit.

NUR:
Die Textdatei ist 2-zeilig, ist so von mir gewünscht. Enthält die aktuellen Wetterdaten aus WsWin
Siehe: http://www.wetterstation-lienen.de/ws_webcam.txt​

Im Bild wird aber nur 1 Zeile dargestellt. Die 2. Zeile fehlt  :eek: ...und ich weiß nicht warum.
Siehe: http://www.wetterstation-lienen.de/ws_webcam_gross.png​

Liegt das an dem php-Code  :confused:

Hier mal der Inhalt der PHP-Datei ("wettercam.php")
<?php
  $Text 
file("ws_webcam.txt");
  
$Text[0] = substr($Text[0], 0strlen($Text[0])-2);
  
$Text[0] = str_replace('l/m²''mm'$Text[0]);
  
$Grafik  imagecreate(640,65);
  
$Hintergrundfarbe imagecolorallocate($Grafik,   0,   0,   0);
  
$Textfarbe        imagecolorallocate($Grafik255255255);
  
imagestring($Grafik200,  $Text[0], $Textfarbe);
  
//imagecolortransparent($Grafik, $Hintergrundfarbe);
  
imagepng($Grafik"ws_webcam.png");
  
imagedestroy($Grafik);
  
$Grafik  imagecreate(850,55);
  
$Hintergrundfarbe imagecolorallocate($Grafik,   0,   0,   0);
  
$Textfarbe        imagecolorallocate($Grafik255255255);
  
imagestring($Grafik500,  $Text[0], $Textfarbe);
  
imagecolortransparent($Grafik$Hintergrundfarbe);
  
imagepng($Grafik"ws_webcam_gross.png");
  
imagedestroy($Grafik);
?>


Habt ihr dafür eine Lösung?
Ich hoffe, dass ihr mir da helfen könnt.
Vielen Dank vorab!
Gruß
Frank
Wetterstation Lienen  , 64 m ü NN

VP2 (6152EU) + Tageszeitbelüftung (7747) + Datenlogger (seriell), WsWin (2.98.7 ),
Hellmann (200cm²), Mete-On1, Mobotix M16-D6/N6-061, Davis 6372, Solarsensor 6450.

RdWetter

Servus Frank,

ich bin zwar kein php-Experte, aber vielleicht kann ich trotzdem für Verwirrung sorgen.
Da die Datei "ws-webcam.txt" zwei Zeilen hat und Du diese in $Text einließt,
ist $Text ein Array mit zwei Werten (Strings).
$Text[0] = 1. Zeile
$Text[1] = 2. Zeile

Laut Deinem Script bearbeitest und verwendest Du nur $Text[0] (1. Zeile).
Du müsstest evtl. bei imagestring(...) statt $Text[0] einfach nur $Text einsetzen und
Deine Bearbeitung auf $Text[1] erweitern.

Sollte $Text nicht funktionieren, mußt Du evtl. ein zweites imagestring(...) mit $Text[1]
erzeugen.
Servus
Alex

joergeli

#2
Hallo Frank,

versuch's mal so:


<?php
$Text 
file("ws_webcam.txt"); // ist ein Array mit 2 Eintraegen !
// print_r ($Text);    // Array anzeigen
$Text[0] = substr($Text[0], 0strlen($Text[0])-2);
$Text[0] = $Text[0]."  "// 2 Leerzeichen an erste Zeile anhaengen
$Text[1] = str_replace('l/m²''mm'$Text[1]);
//  echo "<hr>";
//  echo $Text[0]."<br>";
//  echo $Text[1]."<hr>"; 
  
$my_img imagecreate85055 );
$background  imagecolorallocate$my_img100100100 );
$text_colour imagecolorallocate$my_img255255);
imagestring$my_img2525$Text[0].$Text[1], $text_colour );
header"Content-type: image/png" );
imagepng$my_img );
imagecolordeallocate$text_color );
imagecolordeallocate$background );
imagedestroy$my_img );
?>


Aus Deiner ws_webcam.txt wird ein Array mit 2 Einträgen: $Text[0] und $Text[1]
.
Zum besseren Verständnis kannst Du die (in obigen Code auskommentierten) print_r- und echo-Befehle mal aktivieren, dann muss aber zusätzlich der kpl. Code ab $my_img = ....... auskommentiert werden, sonst gibt's Fehlermeldung.

Gruß
Jörg

@Alex
ZitatSollte $Text nicht funktionieren, mußt Du evtl. ein zweites imagestring(...) mit $Text[1] erzeugen.
... habe ich zuerst auch versucht - funktioniert nicht.
Deshalb einfach die beiden Texte im imagestring mit einem Punkt verbinden: $Text[0].$Text[1]
Wetterstation Heinzenberg / Taunus:
http://www.joergeli.de/
WS 2500-PC (V3.1) mit Superhet-Empfänger HFS 302
2xWS 1000, WS 2000, WS2200, WS2500, WS 3001, WS 3000TV

Arduino-Bastelseite:
http://www.arduino.joergeli.de

RdWetter

Servus Jörg,

werden bei Deiner Lösung die beiden Texte in einer Zeile geschrieben oder zweizeilig?
So wie ich das Verstanden habe will er zweizeilig.
Falls Deine Lösung einzeilig ist, hast Du evtl. noch eine Lösung für zweizeilig?
Servus
Alex

Dete

#4
Hallo ihr beiden,

danke erst einmal für eure Antworten.
Bloß ich als blutiger Anfänger... :oops:

Irgendwie funktioniert der Code nun nicht:
<?php
$Text 
file("ws_webcam.txt"); // ist ein Array mit 2 Eintraegen !
// print_r ($Text);    // Array anzeigen
$Text[0] = substr($Text[0], 0strlen($Text[0])-2);
$Text[0] = $Text[0]."  "// 2 Leerzeichen an erste Zeile anhaengen
$Text[1] = str_replace('l/m²''mm'$Text[1]);
//  echo "<hr>";
//  echo $Text[0]."<br>";
//  echo $Text[1]."<hr>"; 
$Grafik imagecreate85055 );
$background  imagecolorallocate$Grafik00);
$text_colour imagecolorallocate$Grafik255255255 );
imagestring$Grafik2525$Text[0].$Text[1], $text_colour );
header"Content-type: image/png" );
imagepng$Grafik,"ws_webcam_gross.png );
imagecolordeallocate( 
$text_color );
imagecolordeallocate( 
$background );
imagedestroy( 
$Grafik );
?>


Da ist wohl was faul?

EDIT:
Es fehlte ein " hinter ws_webcam_gross.png

Aber trotzdem ist das Ergebnis nicht 2-zeilg.
Zudem ist der Hintergrund nicht transparent?
Gruß
Frank
Wetterstation Lienen  , 64 m ü NN

VP2 (6152EU) + Tageszeitbelüftung (7747) + Datenlogger (seriell), WsWin (2.98.7 ),
Hellmann (200cm²), Mete-On1, Mobotix M16-D6/N6-061, Davis 6372, Solarsensor 6450.

joergeli

Hallo Alex,

die Ausgabe erfolgt einzeilig.

... aber Asche auf mein Haupt, Du hast natürlich Recht, ein zweiter imagestring funktioniert doch.
( ich Blödel  habe es mit imagestring_1 und imagestring_2 versucht )

So erfolgt die Ausgabe zweizeilig ( hier mal als eigenständiges "HTML"-Bild ):

<?php
$Text 
file("ws_webcam.txt"); // ist ein Array mit 2 Eintraegen !
$Text[0] = substr($Text[0], 0strlen($Text[0])-2);
$Text[0] = $Text[0]."  "// 2 Leerzeichen an erste Zeile anhaengen
$Text[1] = str_replace('l/m²''mm'$Text[1]); 
$my_img imagecreate85055 );
$background  imagecolorallocate$my_img100100100 );
$text_colour imagecolorallocate$my_img255255);
imagestring$my_img2510$Text[0], $text_colour );
imagestring$my_img2530$Text[1], $text_colour );
imagepng$my_img"wetterdaten.png" ); 
imagecolordeallocate$text_color );
imagecolordeallocate$background );
imagedestroy$my_img );
?>


<img src="wetterdaten.png" alt="Wetterdaten" >


Gruß
Jörg


Wetterstation Heinzenberg / Taunus:
http://www.joergeli.de/
WS 2500-PC (V3.1) mit Superhet-Empfänger HFS 302
2xWS 1000, WS 2000, WS2200, WS2500, WS 3001, WS 3000TV

Arduino-Bastelseite:
http://www.arduino.joergeli.de

Dete

Aha  :)

so sieht der Code von Jörg als Ergebnis aus :
http://www.wetterstation-lienen.de/ws_webcam_gross.png

oder auch auf der Page:
http://www.wetterstation-lienen.de/Wetterwebcam

2-zeilig aber nicht transparenter Hintergrund und die Schrift ist etwas zu klein.
Gruß
Frank
Wetterstation Lienen  , 64 m ü NN

VP2 (6152EU) + Tageszeitbelüftung (7747) + Datenlogger (seriell), WsWin (2.98.7 ),
Hellmann (200cm²), Mete-On1, Mobotix M16-D6/N6-061, Davis 6372, Solarsensor 6450.

RdWetter

Servus Frank,

probiers mal damit:
<?php
$Text 
file("ws_webcam.txt"); // ist ein Array mit 2 Eintraegen !
$Text[0] = substr($Text[0], 0strlen($Text[0])-2);
$Text[1] = str_replace('l/m²''mm'$Text[1]); 
$my_img imagecreate85055 );
$background  imagecolorallocate$my_img100100100 );
$text_colour imagecolorallocate$my_img255255);
imagecolortransparent $my_img$background );
imagestring$my_img2510$Text[0], $text_colour );
imagestring$my_img2530$Text[1], $text_colour );
imagepng$my_img"wetterdaten.png" ); 
imagecolordeallocate$my_img$text_colour );
imagecolordeallocate$my_img$background );
imagedestroy$my_img );
?>


<img src="wetterdaten.png" alt="Wetterdaten" >
Servus
Alex

joergeli

@Frank

Dass Du es transparent haben wolltest, hatte ich nicht bemerkt.

Hier nun 2-zeilig, transparent und als eigenständiges Bild:

<?php
$text 
file("ws_webcam.txt"); // ist ein Array mit 2 Eintraegen !
$text[0] = substr($text[0], 0strlen($text[0])-2);
$text[0] = $text[0]."  "// 2 Leerzeichen an erste Zeile anhaengen
$text[1] = str_replace('l/m²''mm'$text[1]); 
$grafik imagecreate85055 );
$background  imagecolorallocatealpha$grafik000127 );    // transparent
$text_color imagecolorallocate$grafik2000200 );    //  RGB : violett
imagestring$grafik2510$text[0], $text_color );
imagestring$grafik2530$text[1], $text_color );
imagepng$grafik"wetterdaten.png" ); 
imagecolordeallocate$text_color );
imagecolordeallocate$background );
imagedestroy$grafik );
?>

<img src="wetterdaten.png" alt="Wetterdaten" >


Achtung:
Die letzte Zeile ist ein normaler HTML-Tag

Sieht dann so aus:
http://joergeli.de/test.php

Nebenbei:
Ich habe mir angewöhnt, alle Variablen-Namen klein zu schreiben (  $Grafik != $grafik ),
sonst sucht man sich manchmal 'nen Wolf, warum etwas nicht funktioniert.
Unter Windows ist Groß-/Kleinschreibung zwar egal, nicht aber unter UNIX, PHP, etc.

Gruß
Jörg

P.S:
Schrift zu klein ?:
mal hier spielen: imagestring( $grafik, 2, 5, 10, $text[0], $text_color );

Ansonsten mal nach "PHP imagestring" googeln, bzw. nach den anderen PHP-Befehlen,
dort findet man auch Beispiele zu den Parametern ;-)
Wetterstation Heinzenberg / Taunus:
http://www.joergeli.de/
WS 2500-PC (V3.1) mit Superhet-Empfänger HFS 302
2xWS 1000, WS 2000, WS2200, WS2500, WS 3001, WS 3000TV

Arduino-Bastelseite:
http://www.arduino.joergeli.de

RdWetter

Servus Jörg,

Du müsstest die Zeilen mit "imagecolordeallocate" noch wie folgt umändern,
da sonst der php-Parser (oder wie das Ding heist) bei mir eine Fehlermeldung bringt.
imagecolordeallocate( $grafik, $text_colour );
imagecolordeallocate( $grafik, $background );
Servus
Alex