cromafi: Problem: mit PHP ein Bild erstellen

Hallihallo.. einen wunderschönen Freitag wünsche ich euch!

Meine IST Zustand:
<?php
if($_GET[image] == create)
{
 header("Content-type: image/png");
 $text = $_POST['text'];

$pic       = imagecreatefrompng("images/image.png");
 $schriftfarbe  = imagecolorallocate($pic, 0, 0, 0);
 $px       = (imagesx($pic) - 7.5 * strlen($text)) / 2;
 imagestring($pic, 3, $px, 9, $text, $schriftfarbe);
 imagepng($pic);
 $angle = rand(-5,5);
 imagedestroy($pic);
}

echo "<form action="image.php?image=create" method="POST">
<textarea name="text" style="width:200" style="height:100"></textarea>
<input type="submit" value="Absenden">
</form>";
?>

Mein SOLL Zustand:

Ich möchte das wenn ich einen Texteingebe per Textarea, das dieser im "Bild" genau so Publiziert wird... Also mit Zeilenumbruch ..
Nun habe ich das Problem das Wenn ich einen Texteingebe dieser auf einer Zeile bleibt und über das Bild hinaus geht(abschneidet)...

Gibt es noch so Details wie.. Fonts "Helvetica" einzusetzen?

mfg
cromafi

  1. kann mir niemand helfen?

    1. Hallo,

      ich kann dir leider nicht helfen aber 2 Anmerkungen hinterlassen.
      Das $_POST[text] solltest du so $_POST['text'] schreiben und wozu ist das $angle = rand(-5,5); ?

      Grüße, Matze

  2. Moin,

    Meine IST Zustand:
    <?php
    if($_GET[image] == create)

    an dieser Stelle kassierst du schon zwei Notices, weil weder die Konstante image noch die Konstante create definiert ist. Eventuell eine dritte, weil außer $_GET[image] auch $_GET['image'] nicht existiert.

    {
    header("Content-type: image/png");
    $text = $_POST['text'];

    Warum kopierst du $_POST['text'] nochmal um? Viel interessanter wäre eine Abfrage, ob der Parameter überhaupt existiert.

    $pic       = imagecreatefrompng("images/image.png");
    $schriftfarbe  = imagecolorallocate($pic, 0, 0, 0);
    $px       = (imagesx($pic) - 7.5 * strlen($text)) / 2;
    imagestring($pic, 3, $px, 9, $text, $schriftfarbe);
    imagepng($pic);
    $angle = rand(-5,5);
    imagedestroy($pic);

    Was versprichst du dir von $angle=... nach dem Ausgeben der Bilddaten?

    }

    echo "<form action="image.php?image=create" method="POST">

    HALT! Wie kommst du auf die komische Idee, in einer BILD-Ressource noch HTML-Text auszugeben? Wenn die o.g. Fehler nicht wären, so dass die header()-Anweisung wirksam sein könnte, dann würde das natürlich ignoriert.

    <textarea name="text" style="width:200" style="height:100"></textarea>

    Falsch: In den style-Attributen fehlt die Einheit. Außerdem überschreibt das zweite style-Attribut das erste.

    Ich möchte das wenn ich einen Texteingebe per Textarea, das dieser im "Bild" genau so Publiziert wird... Also mit Zeilenumbruch ..

    Also brauchst du zwei voneinander unabhängige Ressourcen - eine vom Typ text/html mit dem Formular, und eine mit dem Typ image/* für das Bild. Natürlich ist s möglich, beides in ein Script zu packen und darauf zu vertrauen, dass überzähliger Schrott hinter den Bilddaten wirklich ignoriert wird. Sauber ist das aber nicht.

    Nun habe ich das Problem das Wenn ich einen Texteingebe dieser auf einer Zeile bleibt und über das Bild hinaus geht(abschneidet)...

    Du gibst ihn ja auch nur in einem Stück (d.h. als eine Zeile) auf das Bild aus. Wenn du mehrere Zeilen willst, musst du den String zuerst an den Zeilenumbrüchen aufsplitten und dann mehrere Teilstrings ins Bild schreiben (und die y-Position natürlich mit jedem Schritt incrementieren). Das rettet dich aber immer noch nicht davor, dass lange Zeilen über das Bild hinauslaufen und logischerweise am Rand abgeschnitten werden.

    Gibt es noch so Details wie.. Fonts "Helvetica" einzusetzen?

    Wenn du unterschiedliche Schriftarten berücksichtigen willst, wird das natürlich noch einen Schritt aufwendiger. Die Frage ist aber auch, wie das lizenzrechtlich aussieht - immerhin müsstest du alle in Frage kommenden Schriften als Truetype-Font auf dem Server vorhalten.

    So long,
     Martin

    --
    Zum Glück ist alles nur halb so doppelt.