text to images

rernanded

Erfahrenes Mitglied
Wie kann ich am besten alle Zeilen in einer .txt in images wandeln und sofort anzeigen?
Hier mein Code der leider nur die letzte Zeile umwandelt.
MONI

PHP:
<form method="post" action="txt2img.php" enctype="multipart/form-data">
<input type="text" name="text1" size="100">
<input type="submit" value="los">
</form>

<?php
  $fn = fopen("test.txt","r");
 
  while(! feof($fn))  {
    $result = fgets($fn);

foreach (array($result) as $wow) {

//echo $wow."<br />";

//$text = $_POST["text1"];
$text = $wow;

// (A) NEW EMPTY IMAGE OBJECT
// imagecreate(WIDTH, HEIGHT)
$img = imagecreate(150, 80);

// (B) SET COLORS
// imagecolorallocate(IMAGE, RED, GREEN, BLUE)
$red = imagecolorallocate($img, 255, 0, 0);
$white = imagecolorallocate($img, 255, 255, 255);

// (C) EMPTY RED RECTANGLE
// imagefilledrectangle(IMAGE, START X, START Y, END X, ENDY, COLOR)
imagefilledrectangle($img, 0, 0, 150, 80, $red);

// (D) WRITE TEXT
// imagestring(IMAGE, FONT, X, Y, TEXT, COLOR)
// FONT is a number 1 to 5. 1 is smallest font size, 5 is biggest.
imagestring($img, 5, 10, 10, $text, $white);

// (E) SAVE TO FILE
// imagepng(IMAGE, TARGET FILE)
imagepng($img, "twitter_members_images/$text.png");
imagedestroy($img); // OPTIONAL

}
}

fclose($fn);
?>
 
Du hast da eine Schleife zu viel, denn das fgets liefert schon die Datei Zeile für Zeile. Zusätzlich musste ich noch den Zeilenumbruch entfernen, damit es funktionierte.
PHP:
$fn = fopen("test3.txt", "r");

while (!feof($fn)) {
    $result = fgets($fn);
    $wow = rtrim($result, "\r\n");

    // foreach (array($result) as $wow) {

//echo $wow."<br />";

//$text = $_POST["text1"];
    $text = $wow;

// (A) NEW EMPTY IMAGE OBJECT
    // imagecreate(WIDTH, HEIGHT)
    $img = imagecreate(150, 80);

// (B) SET COLORS
    // imagecolorallocate(IMAGE, RED, GREEN, BLUE)
    $red = imagecolorallocate($img, 255, 0, 0);
    $white = imagecolorallocate($img, 255, 255, 255);

// (C) EMPTY RED RECTANGLE
    // imagefilledrectangle(IMAGE, START X, START Y, END X, ENDY, COLOR)
    imagefilledrectangle($img, 0, 0, 150, 80, $red);

// (D) WRITE TEXT
    // imagestring(IMAGE, FONT, X, Y, TEXT, COLOR)
    // FONT is a number 1 to 5. 1 is smallest font size, 5 is biggest.
    imagestring($img, 5, 10, 10, $text, $white);

// (E) SAVE TO FILE
    // imagepng(IMAGE, TARGET FILE)
    imagepng($img, "images/$text.png");
    imagedestroy($img); // OPTIONAL

}

fclose($fn);?>
Ich finde jedoch das zeilenweise Lesen mit der Funktion file einfacher und übersichtlicher:
PHP:
$text = file("test3.txt", FILE_IGNORE_NEW_LINES);

// (A) NEW EMPTY IMAGE OBJECT
// imagecreate(WIDTH, HEIGHT)
$img = imagecreate(150, 80);

// (B) SET COLORS
// imagecolorallocate(IMAGE, RED, GREEN, BLUE)
$red = imagecolorallocate($img, 255, 0, 0);
$white = imagecolorallocate($img, 255, 255, 255);

foreach ($text as $line) {

    // (C) EMPTY RED RECTANGLE
    // imagefilledrectangle(IMAGE, START X, START Y, END X, ENDY, COLOR)
    imagefilledrectangle($img, 0, 0, 150, 80, $red);

    // (D) WRITE TEXT
    // FONT is a number 1 to 5. 1 is smallest font size, 5 is biggest.
    imagestring($img, 5, 10, 10, $line, $white);

    // (E) SAVE TO FILE
    // imagepng(IMAGE, TARGET FILE)
    imagepng($img, "images/$line.png");
}
imagedestroy($img); // OPTIONAL
 
Zuletzt bearbeitet von einem Moderator:
Danke Dir, es funktionieren beide Versionen und die Images werden im Zielordner gespeichert.
Nur im oberen Fall, also mit meinen "alten bearbeiteten" Code da kann ich ein
PHP:
echo "<img src=\"twitter_members_images/$text.png\"><br /><br />";
einbauen und alle Bilder aus dem Zielordner werden angezeigt.


Baue ich aber
PHP:
echo "<img src=\"twitter_members_images/$line.png\"><br /><br />";
im unteren Code ein, wird nur das letzte Bild aus dem Zielordner angezeigt.
Das dürfte an dem foreach liegen.?!

MONI
 
Dann vermute ich sehr stark, dass Du das echo hinter der Schleife eingebaut hast, sonst erkenne ich keinen Grund dafür, dass nicht alle Bilder angezeigt werden.
 
Wie löse ich denn das kleine Problem, dass im Zielordner die Images anders abgespeichert werden als sie wiedergegeben werden.

im Ordner:

@_AName
@_bName
@cname
@D_name

in der Wiedergabe:

@D_name
@_AName
@cname
@_bName

Ich brauche die Wiedergabe 1:1 wie im Ordner.

MONI
 
Wenn ich das richtig sehe, sind sie im Ordner aufsteigend sortiert und die Wiedergabe basiert auf der Reihenfolge wie sie in der Datei stehen. Also das Array zunächst sortieren bevor es mit der Schleife los geht? Ein einfaches sort ohne Callback müsste zum Ziel führen.
 
Zurück