Start · Sprachen · PHP · Referenz · getimagesize

getimagesize

Funktion

Liest Breite, Höhe, Bildtyp und weitere Metadaten einer Bilddatei aus und gibt sie als Array zurück.

seit PHP 4.0.0 Kategorie: image

Signatur

getimagesize(string $filename, array &$image_info = null): array|false

Beschreibung

getimagesize() öffnet eine Bilddatei (lokal oder per URL) und extrahiert grundlegende Informationen wie Breite, Höhe, Bildtyp-Konstante sowie einen fertigen width="…" height="…"-HTML-Attributstring. Die Funktion unterstützt eine Vielzahl von Formaten, darunter JPEG, PNG, GIF, WebP, BMP, AVIF, TIFF, SVG und viele weitere.

Das zurückgegebene Array ist numerisch indiziert: Index 0 enthält die Breite in Pixeln, Index 1 die Höhe in Pixeln, Index 2 eine IMAGETYPE_*-Konstante (z. B. IMAGETYPE_JPEG) und Index 3 einen fertigen HTML-Attributstring ('width="800" height="600"'). Zusätzlich enthält der assoziative Schlüssel 'mime' den MIME-Typ des Bildes.

Der optionale zweite Parameter $image_info wird als Referenz übergeben und kann nach dem Aufruf erweiterte Informationen enthalten, beispielsweise eingebettete IPTC-Daten bei JPEG-Dateien.

Die Funktion ist besonders nützlich, um vor der Ausgabe oder Verarbeitung eines Bildes dessen Abmessungen zu prüfen, den richtigen MIME-Typ zu ermitteln oder in HTML-Templates korrekte Dimensionsangaben einzufügen.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur Bilddatei (lokaler Pfad oder URL). Bei Remote-URLs muss allow_url_fopen in der php.ini aktiviert sein.
$image_info array null Optionaler Referenzparameter. Nach dem Aufruf kann dieses Array erweiterte Metadaten enthalten, z. B. IPTC-Daten (APP13) bei JPEG-Dateien.

Rückgabewert

Typ
array|false
Beschreibung

Bei Erfolg ein Array mit mindestens folgenden Einträgen:

  • [0] — Breite in Pixeln (int)
  • [1] — Höhe in Pixeln (int)
  • [2] — Bildtyp als IMAGETYPE_*-Konstante (int)
  • [3] — Fertige HTML-Attributzeichenkette, z. B. 'width="800" height="600"' (string)
  • 'mime' — MIME-Typ des Bildes, z. B. 'image/jpeg' (string)
  • 'channels' — Anzahl der Farbkanäle (3 für RGB, 4 für CMYK; nur bei JPEG)
  • 'bits' — Bit-Tiefe pro Kanal (nicht bei allen Formaten verfügbar)

Im Fehlerfall (Datei nicht lesbar, kein gültiges Bild) wird false zurückgegeben und ein E_WARNING ausgelöst.

Beispiele

Bildabmessungen und MIME-Typ ausgeben

<?php
$info = getimagesize('/var/www/html/images/photo.jpg');

if ($info === false) {
    echo 'Datei konnte nicht gelesen werden oder ist kein gültiges Bild.';
} else {
    echo 'Breite:    ' . $info[0] . ' px' . PHP_EOL;
    echo 'Höhe:      ' . $info[1] . ' px' . PHP_EOL;
    echo 'Bildtyp:   ' . $info[2] . ' (IMAGETYPE_JPEG = ' . IMAGETYPE_JPEG . ')' . PHP_EOL;
    echo 'MIME-Typ:  ' . $info['mime'] . PHP_EOL;
    echo 'HTML-Attr: ' . $info[3] . PHP_EOL;
}
Breite: 1920 px Höhe: 1080 px Bildtyp: 2 (IMAGETYPE_JPEG = 2) MIME-Typ: image/jpeg HTML-Attr: width="1920" height="1080"

Bild im HTML-Template mit korrekten Dimensionen einbinden

<?php
$file = '/var/www/html/images/banner.png';
$info = getimagesize($file);

if ($info !== false) {
    // $info[3] enthält den fertigen width/height-Attributstring
    echo '<img src="/images/banner.png" ' . $info[3] . ' alt="Banner">';
} else {
    echo '<!-- Bild nicht verfügbar -->';
}
<img src="/images/banner.png" width="600" height="200" alt="Banner">

Upload-Validierung: Nur echte Bilder akzeptieren

<?php
$uploadedFile = $_FILES['bild']['tmp_name'] ?? '';

if ($uploadedFile === '' || !is_uploaded_file($uploadedFile)) {
    die('Kein gültiger Upload.');
}

$info = @getimagesize($uploadedFile);

if ($info === false) {
    die('Die hochgeladene Datei ist kein gültiges Bild.');
}

$erlaubteMimeTypes = ['image/jpeg', 'image/png', 'image/webp', 'image/gif'];

if (!in_array($info['mime'], $erlaubteMimeTypes, true)) {
    die('Bildformat nicht erlaubt: ' . htmlspecialchars($info['mime']));
}

echo 'Bild akzeptiert: ' . $info[0] . 'x' . $info[1] . ' px, ' . $info['mime'];
Bild akzeptiert: 800x600 px, image/jpeg

// Wichtig · Fallstricke

Sicherheitshinweis: getimagesize() liest tatsächlich Bilddaten und ist daher zuverlässiger als eine reine MIME-Typ-Prüfung über den vom Browser gemeldeten Content-Type. Dennoch ersetzt sie keine vollständige Sicherheitsprüfung bei Datei-Uploads – prüfe zusätzlich Dateigröße, Dateiendung und speichere Uploads außerhalb des Web-Roots.

Performance: Die Funktion muss die Datei (ggf. partiell) lesen. Bei Remote-URLs kann dies zu Latenzen führen. Für reine Typ-Erkennung ohne Dimensionen ist exif_imagetype() schneller, da es nur den minimalen Header liest.

SVG und nicht-rasterbasierte Formate: SVG-Dateien werden nur unter bestimmten Voraussetzungen (libxml) korrekt verarbeitet. Die Pixelangaben können bei vektorbasierten Formaten fehlen oder 0 sein.

Fehlerbehandlung: Bei nicht lesbaren Dateien oder ungültigen Bildformaten gibt die Funktion false zurück und erzeugt ein E_WARNING. Unterdrücke Warnungen mit @ nur, wenn du den Rückgabewert anschließend explizit prüfst.