Mit Hilfe der Funktion getimagesize() kann man die Dimensionen eines Bildes in den Formaten GIF, JPG, PNG, SWF und weiterer Formate ermitteln. Dies ist beispielsweise nützlich, wenn Anwender selbst Bilder hochladen können, die aber eine bestimmte Pixelgröße nicht überschreiten dürfen. Auch wenn man vorhandene Bilder in der Größe anpassen möchte, ist es zunächst nötig, die Breite und Höhe des ursprünglichen Bildes zu kennen, damit es im richtigen Verhältnis verkleinert werden kann. Damit kann man z.B. eine Vorschauansicht generieren.
Die Funktion liefert aber noch weitere Daten über ein Bild. Der Rückgabewert ist ein Array, das neben der Breite und Höhe noch den Typ der Grafik, die Höhe und Breite als ein String zur Einbettung in ein IMG-Tag liefert. Ebenso lassen sich der MIME-Typ ermitteln, ob es sich um eine RGB- oder CMYK-Grafik handelt sowie die Bits pro Pixel.
Die Syntax:
getimagesize ( string $filename )
Beispiel
<?php
$bild = './bild.JPG';
if (getimagesize($bild) !== false) {
list($breite, $hoehe, $grafik_type, $img_tag) =
getimagesize($bild);
echo 'Das Bild ' . $bild . ' hat die Masse: '
. $breite . 'x' . $hoehe . '.';
} else {
echo 'Die Masse konnten nicht ermittelt werden.';
}
?>
Ausgabe: Das Bild bild.JPG hat die Maße: 125x80.
Mit der Prüfung getimagesize($bild) !== false wird sichergestellt, dass es sich um ein gültiges Bildformat handelt. Ist dies nicht der Fall, wird eine Fehlermeldung ausgegeben. Ansonsten werden die Bilddaten mit list() in einzelne Variablen entpackt.
Der Rückgabewert im Detail
getimagesize() gibt ein Array mit folgenden Einträgen zurück:
| Index | Inhalt |
|---|
| 0 | Breite in Pixel |
| 1 | Höhe in Pixel |
| 2 | IMAGETYPE-Konstante (z.B. IMAGETYPE_JPEG) |
| 3 | String für IMG-Tag: height="yy" width="xx" |
| mime | MIME-Typ der Grafik (z.B. image/jpeg) |
| channels | 3 für RGB, 4 für CMYK |
| bits | Bits pro Pixel |
Ausgabe:
Das Bild bildname.jpg hat die Maße: 125 x 80.
Erklärung:Mit "if(@getimagesize($bild)!=false)" wird überprüft, ob es sich um ein gültiges Format handelt. Ist dies nicht der Fall, wird die Fehlermeldung "Die Maße von den Bild bildname.jpg konnten nicht ermittelt werden" ausgegeben. Ansonsten werden die Daten des Bildes ermittelt und das zurückgebene Array ausgelesen.
Das Array enthält folgende Daten:
0: Die Breite des Bildes
1: Die Höhe des Bildes
2: IMAGETYPE_XXX-Konstante
3: Ein String im Format height="yy" width="xx" zur Einbettung in ein IMG-Tag
4: mime - MIME-Typ der Grafik
5: channels - für RGB-Grafiken wird der Wert 3, für CMYK-Grafiken der Wert 4 zurückgegeben
6: bits - Anzahl der Bits pro Pixel (dieser Wert kann nicht immer ermittelt werden, z.B. bei animierten GIFs)
Anschließend werden die Breite und Höhe des Bildes per echo ausgegeben.
Hinweis: Alternativ können mit getimagesize ( string $filename, array &$imageinfo ) weitere Informationen ermittelt werden. Derzeit werden verschiedene JPG APP Markierungen als assoziatives Array zurückgeliefert.
Bildtyp mit IMAGETYPE-Konstanten prüfen
Der dritte Wert im Array (Index 2) gibt den Bildtyp als numerische Konstante zurück. Statt den Zahlenwert direkt zu vergleichen, sollten Sie die vordefinierten IMAGETYPE-Konstanten verwenden. So wird der Code lesbarer und zukunftssicher.
<?php
$info = getimagesize('foto.jpg');
switch ($info[2]) {
case IMAGETYPE_JPEG:
echo 'JPEG-Bild';
break;
case IMAGETYPE_PNG:
echo 'PNG-Bild';
break;
case IMAGETYPE_GIF:
echo 'GIF-Bild';
break;
case IMAGETYPE_WEBP:
echo 'WebP-Bild';
break;
default:
echo 'Unbekanntes Format';
}
?>
Bilder beim Upload validieren
Beim Datei-Upload ist getimagesize() ein wichtiges Werkzeug, um sicherzustellen, dass die hochgeladene Datei tatsächlich ein gültiges Bild ist und die vorgegebenen Maße nicht überschreitet. Anders als eine reine Prüfung der Dateiendung analysiert getimagesize() den tatsächlichen Inhalt der Datei.
<?php
$max_breite = 1920;
$max_hoehe = 1080;
$erlaubte_typen = array(
IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_WEBP
);
$upload = $_FILES['bild']['tmp_name'];
$info = getimagesize($upload);
if ($info === false) {
echo 'Die Datei ist kein gueltiges Bild.';
} elseif (!in_array($info[2], $erlaubte_typen)) {
echo 'Nur JPEG, PNG und WebP erlaubt.';
} elseif ($info[0] > $max_breite || $info[1] > $max_hoehe) {
echo 'Bild zu gross: maximal '
. $max_breite . 'x' . $max_hoehe . ' Pixel.';
} else {
echo 'Bild gueltig: '
. $info[0] . 'x' . $info[1] . ' Pixel.';
}
?>
Statt den Fehlerunterdrückungsoperator @ zu verwenden, prüfen Sie besser den Rückgabewert: getimagesize() gibt bei ungültigen Dateien false zurück, was sich sauber mit einer if-Anweisung abfangen lässt.
Vorschaubilder im richtigen Verhältnis berechnen
Wenn Sie Vorschaubilder (Thumbnails) erzeugen möchten, müssen Breite und Höhe im richtigen Seitenverhältnis verkleinert werden. getimagesize() liefert die Originalgröße, aus der Sie die Thumbnail-Maße berechnen können.
<?php
function thumbnail_masse($datei, $max = 200) {
$info = getimagesize($datei);
if ($info === false) {
return false;
}
$breite = $info[0];
$hoehe = $info[1];
if ($breite > $hoehe) {
$neue_breite = $max;
$neue_hoehe = intval($hoehe * $max / $breite);
} else {
$neue_hoehe = $max;
$neue_breite = intval($breite * $max / $hoehe);
}
return array($neue_breite, $neue_hoehe);
}
$thumb = thumbnail_masse('foto.jpg', 150);
echo $thumb[0] . 'x' . $thumb[1];
/* z.B. Ausgabe: 150x100 */
?>
getimagesizefromstring(): Bilder aus Variablen prüfen
Seit PHP 5.4 gibt es die Funktion getimagesizefromstring(). Sie funktioniert genau wie getimagesize(), erwartet aber statt eines Dateipfads den Bildinhalt als String. Das ist nützlich, wenn Sie Bilddaten aus einer Datenbank oder von einer API erhalten haben und die Maße prüfen möchten, ohne die Datei zuerst auf der Festplatte zu speichern.
<?php
$bildinhalt = file_get_contents('foto.jpg');
$info = getimagesizefromstring($bildinhalt);
if ($info !== false) {
echo 'Breite: ' . $info[0];
echo 'Hoehe: ' . $info[1];
echo 'MIME: ' . $info['mime'];
}
?>