Imagefunktionen erzeugen einen error

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

tklustig

Erfahrenes Mitglied
Hallo Leute, folgendes Script soll eigentlich Aktienkurse grafisch darstellen. Folgendes img-Tag wird erzeugt:
Code:
<img src="http://localhost/Beispielprogramme/Aktienkurse/im_aktie.php" alt="The image “http://localhost/Beispielprogramme/Aktienkurse/im_aktie.php” cannot be displayed because it contains errors.">
Folgendes HTML-Script erzeugt folglich keine Ausgabe:
HTML:
<!Doctype html> <!-- Definition des doctype-Modus -->
<html> <!-- Definition des Stammverzeichnises -->
    <head> <!-- Definition des Kopfbereiches -->
        <meta charset="utf-8"> <!-- charset[utf-8:]  definiert den deutschen Zeichensatz -->
        <title> PHP </title> <!-- weist dem HTML-Dokument in der Registerkarte einen Namen zu -->
    </head>
    <body> <!-- ab hier HTML-Code einfügen -->
        <!-- Hier ggf. Formular einfügen einfügen -->
        Es folgt ein Bild: <img src="im_aktie.php" alt="not available">
    </body>
</html>
Im selben Verzeichnis liegt die Font arial.ttf zum Abruf bereit. Wo liegt der Fehler im Code? Er wird auch mit der Font "coolvetica.ttf" generiert...

PHP:
<?php

// Grafik erzeugen
$im = imagecreate(400, 400);
// Farben, Schriftart
$grau = imagecolorallocate($im, 192, 192, 192);
imagefill($im, 0, 0, $grau);
$s = imagecolorallocate($im, 0, 0, 0);
$r = imagecolorallocate($im, 255, 0, 0);
$schriftart = "arial.ttf";

// Startdatum
$ds = "28.02.2012";
$datum = mktime(0, 0, 0, substr($ds, 3, 2), substr($ds, 0, 2), substr($ds, 6, 4));
$datum = strtotime("-35 day", $datum);

// Kurse
srand((double) microtime() * 1000000);
$kurs[0] = 25;
for ($i = 1; $i < 36; $i++) {
    $kurs[$i] = $kurs[$i - 1] + rand(-3, 3);
    if ($kurs[$i] < 1)
        $kurs[$i] = 1;
}

// Gitternetz, Beschriftung
for ($i = 0; $i < 6; $i++) {
    imageline($im, 30, 30 + $i * 340 / 5, 370, 30 + $i * 340 / 5, $s);
    imagettftext($im, 11, 0, 375, 30 + $i * 340 / 5, $s, $schriftart, 50 - $i * 10);
    imageline($im, 30 + $i * 340 / 5, 30, 30 + $i * 340 / 5, 370, $s);
    imagettftext($im, 11, 0, 12 + $i * 340 / 5, 385, $s, $schriftart, date("d.m.", $datum));
    $datum = strtotime("+7 day", $datum);
}

// Kurs darstellen
for ($i = 0; $i < 35; $i++){
    imageline($im, 30 + $i * 340 / 35, 370 - $kurs[$i] * 340 / 50, 30 + ($i + 1) * 340 / 35, 370 - $kurs[$i + 1] * 340 / 50, $r);
}

// Grafik darstellen
header("Content-Type: image/jpeg");
imagejpeg($im);

// Speicher freigeben
imagedestroy($im);
?>
 
Zuletzt bearbeitet:
Ich habe dein Script getestet und es funktioniert bei mir einwandfrei. Allerdings hatte ich anfangs Probleme, weil mein Editor die Datei mit BOM gespeichert hatte, so dass das Setzen des Header nicht funktionierte. Bei dir vielleicht das selbe Problem?
 
Jetzt klappts. Allerdings nur dann, wenn ich den absoluten Pfad als Quellangabe mitangebe, obgleich alles in denselbem Verzeichnis liegt. Warum dem so ist, entzieht sich meiner Kenntnis. Anbei der Code:
PHP:
//nur so klappts
//$schriftart = "E:/xampp/htdocs/Beispielprogramme/Aktienkurse/arial.ttf";
$folder = getcwd();
$schriftart = $folder . "/arial.ttf";
 
Alternativ hättest du dir auch die Fehlermeldung anzeigen lassen können:
1) Mit dem Browser das Bild direkt aufrufen und Strg + U drücken (Quelltext anzeigen)
2) Das setzen des Headers auskommentieren (Zeile 41) und mit dem Browser direkt aufrufen
3) Mit einem anderen Client die URL aufrufen (z.B. Insomnia)

Grüsse,
BK
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge

Zurück