Start · Sprachen · PHP · Referenz · imagecreatefromjpeg

imagecreatefromjpeg

Funktion

Erstellt ein neues GD-Bildobjekt aus einer vorhandenen JPEG-Datei oder URL und gibt es zurück.

seit PHP 4.0.0 Kategorie: image

Signatur

imagecreatefromjpeg(string $filename): GdImage|false

Beschreibung

imagecreatefromjpeg() liest eine JPEG-Bilddatei vom Dateisystem oder einer URL ein und gibt ein GdImage-Objekt zurück, das für alle weiteren GD-Bildverarbeitungsfunktionen genutzt werden kann. Die Funktion ist der übliche Einstiegspunkt, wenn ein vorhandenes JPEG-Bild bearbeitet, skaliert, zugeschnitten oder in ein anderes Format konvertiert werden soll.

Als $filename kann sowohl ein lokaler Dateipfad als auch eine HTTP- oder FTP-URL übergeben werden, sofern allow_url_fopen in der PHP-Konfiguration aktiviert ist. Bei der Verarbeitung von URLs ist jedoch besondere Vorsicht geboten, da dies potenziell sicherheitsrelevant ist.

Das zurückgegebene GdImage-Objekt (vor PHP 8.0 eine Ressource) muss nach der Verwendung mit imagedestroy() freigegeben werden, um Speicherlecks zu vermeiden – obwohl dies ab PHP 8.0 durch automatisches Speichermanagement weniger kritisch ist. JPEG-Dateien unterstützen keine Transparenz; beim Konvertieren in Formate mit Alphakanal sind zusätzliche Schritte notwendig.

Wenn die Datei nicht gelesen werden kann, beschädigt ist oder kein gültiges JPEG enthält, gibt die Funktion false zurück und erzeugt eine Warnung. Der Rückgabewert sollte daher stets geprüft werden.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur JPEG-Datei auf dem Dateisystem oder eine URL (HTTP/FTP), sofern allow_url_fopen aktiviert ist.

Rückgabewert

Typ
GdImage|false
Beschreibung
Gibt ein GdImage-Objekt zurück (vor PHP 8.0 eine GD-Ressource), das das geladene Bild repräsentiert. Im Fehlerfall (Datei nicht gefunden, ungültiges JPEG usw.) wird false zurückgegeben und eine PHP-Warnung ausgegeben.

Beispiele

JPEG laden und als PNG ausgeben

<?php
// JPEG-Datei einlesen
$image = imagecreatefromjpeg('/var/www/html/fotos/beispiel.jpg');

if ($image === false) {
    die('Fehler: JPEG-Datei konnte nicht geladen werden.');
}

// Als PNG an den Browser senden
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
(PNG-Binärdaten im HTTP-Response)

JPEG skalieren und als JPEG speichern

<?php
$quelldatei = '/var/www/html/fotos/original.jpg';
$zieldatei  = '/var/www/html/fotos/thumbnail.jpg';

$quelle = imagecreatefromjpeg($quelldatei);
if ($quelle === false) {
    die('Quelldatei konnte nicht geladen werden.');
}

$breiteOrig = imagesx($quelle);
$hoeheOrig  = imagesy($quelle);

$neueBreite = 200;
$neueHoehe  = (int) round($hoeheOrig * ($neueBreite / $breiteOrig));

$ziel = imagecreatetruecolor($neueBreite, $neueHoehe);
imagecopyresampled($ziel, $quelle, 0, 0, 0, 0, $neueBreite, $neueHoehe, $breiteOrig, $hoeheOrig);

// Thumbnail als JPEG speichern (Qualität 85)
imagejpeg($ziel, $zieldatei, 85);

imagedestroy($quelle);
imagedestroy($ziel);

echo 'Thumbnail erfolgreich erstellt: ' . $zieldatei;
Thumbnail erfolgreich erstellt: /var/www/html/fotos/thumbnail.jpg

JPEG von einer URL laden (mit Fehlerbehandlung)

<?php
// allow_url_fopen muss in php.ini aktiviert sein
$url = 'https://www.example.com/bild.jpg';

// Fehlerunterdrückung mit @ und anschließende Prüfung
$image = @imagecreatefromjpeg($url);

if ($image === false) {
    echo 'Bild konnte nicht von URL geladen werden.';
} else {
    header('Content-Type: image/jpeg');
    imagejpeg($image, null, 90);
    imagedestroy($image);
}
(JPEG-Binärdaten im HTTP-Response oder Fehlermeldung)

// Wichtig · Fallstricke

Sicherheitshinweis: Wird ein vom Benutzer kontrollierter Dateiname oder eine URL direkt an imagecreatefromjpeg() übergeben, kann dies zu Server-Side Request Forgery (SSRF) oder dem Zugriff auf sensitive lokale Dateien führen. Nutzereingaben müssen immer validiert und auf einen erlaubten Verzeichnispfad eingeschränkt werden (z. B. mit realpath() und einer Whitelist).

GD-Erweiterung: Die Funktion steht nur zur Verfügung, wenn PHP mit JPEG-Unterstützung in der GD-Erweiterung kompiliert wurde. Dies lässt sich mit gd_info() oder phpinfo() prüfen.

Speicher: Große JPEG-Dateien können erheblich viel RAM verbrauchen, da das Bild im unkomprimierten Zustand im Speicher gehalten wird. Die benötigte Speichermenge entspricht ungefähr Breite × Höhe × 4 Byte. Bei sehr großen Bildern sollte das PHP-Speicherlimit (memory_limit) entsprechend angepasst oder die Bildgröße vor dem Laden geprüft werden.

Ab PHP 8.0 gibt die Funktion ein GdImage-Objekt statt einer Ressource zurück. Vergleiche mit === false funktionieren in beiden Fällen korrekt.