text to image

rernanded

Erfahrenes Mitglied
Hi, ich will Daten(Texte) aus einer Datenbank jeweils als Image ausgeben.

Habe folgeden Code der ansonsten funktioniert:
PHP:
<?php

//hier: Datenbankzugangsdaten

$pdo = new PDO("mysql:host=$host;port=$port;dbname=$dbname", $username, $password);
$sql = "SELECT * FROM texte WHERE post_status='publish' AND comment_status='open' AND ping_status='open' ORDER BY ID DESC";

foreach ($pdo->query($sql) as $row) {
 
//  $row["post_title"]:
    
}

$array = array($row["post_title"]); // TEST: $array = array("1", "2", "3"); 

foreach ($array as $value) {
//echo "$value<br />";

    $img = imagecreate(500, 100);
    
    $textbgcolor = imagecolorallocate($img, 173, 230, 181);
    $textcolor = imagecolorallocate($img, 0, 192, 255);
    
        $txt = $value; // wordwrap fehlt noch!!!
        imagestring($img, 30, 30, 30, $txt, $textcolor);
        ob_start();
        imagepng($img);
        printf('<img src="data:image/png;base64,%s"/ width="1000">', base64_encode(ob_get_clean()));
}
?>

Angzeigt wird leider nur der erste Datensatz. MONI
 
Du hast die ganze Prozedur nach der ersten Schleife notiert. Schreibe sie in die erste Schleife und es sollte funktionieren:
Code:
foreach ($pdo->query($sql) as $row) {
    $txt = $row["post_title"];
    $img = imagecreate(500, 100);
    $textbgcolor = imagecolorallocate($img, 173, 230, 181);
    $textcolor = imagecolorallocate($img, 0, 192, 255);
    // $txt = $value; // wordwrap fehlt noch!!!
    imagestring($img, 30, 30, 30, $txt, $textcolor);
    ob_start();
    imagepng($img);
    printf('<img src="data:image/png;base64,%s"/ width="1000">', base64_encode(ob_get_clean()));
}
 
@Sempervivum:

wordwrap() funktioniert leider nicht wie gehofft, sondern erzeugt an der Umbruchstelle ein Sonderzeichen.
Ein V und ein T leicht verschoben übereinander. Ich schätze ein Vertikal Tabulator.

Hast Du 'ne Idee?

MONI

PHP:
foreach ($pdo->query($sql) as $row) {
    $txt = wordwrap($row["post_title"], 10, "\n", true);
    $img = imagecreate(500, 100);
    $textbgcolor = imagecolorallocate($img, 173, 230, 181);
    $textcolor = imagecolorallocate($img, 0, 192, 255);
    imagestring($img, 30, 30, 30, $txt, $textcolor);
    ob_start();
    imagepng($img);
    printf('<img src="data:image/png;base64,%s"/ width="1000">', base64_encode(ob_get_clean()));
}
 
Nicht direkt eine Idee aber ich habe Google benutzt:
Add multi-line/autowrap to imagestring in PHP
Demnach ist es leider so, dass ein Wordwrapping nicht unterstützt wird und man händisch den Text auf Zeilen aufteilen muss. Und dass in der Doku Beispiele dafür angegeben werden in den Benutzerkommentaren. Versuche, ob Du dort etwas findest, was dich weiter bringt.
 
@Sempervivum
Tja, das habe ich gemacht so wie Du auch. Da bin ich vorerst noch ein wenig ratlos.
UPPS (3 Minuten später):

Ich habe wordwrap in imagettftext() untergebracht und noch einige Parameter ergänzt.

imagettftext($img, $font_size, $font_angle, $posX, $posY, $white, $font, wordwrap($txt, 10, "\n", true));

Nun geht es.

MONI
 
Zurück