Anzeige

 Imagefunktionen erzeugen einen error


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

tklustig

Erfahrenes Mitglied
#1
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:

Sempervivum

Erfahrenes Mitglied
#2
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?
 

tklustig

Erfahrenes Mitglied
#4
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";
 

Bratkartoffel

gebratene Kartoffel
Premium-User
#5
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…
Anzeige
Anzeige