Eingebettetes Thumbnail extrahieren
Durch meine Fotografie habe ich viel mit Fotos zu tun. Ich möchte gerne meine eigene Galerie programmieren und benötige dafür auch Informationen aus den EXIF-Daten der erzeugten Dateien. Nicht alle Dateien haben diese Daten, aber die, die ich mit meinen Fotokameras mache, haben sie.
In diesen Daten sind auch die Quelldaten für ein Thumbnail, also für eine Miniaturansicht, enthalten. Man kann sie auf verschiedene Art und Weise Thumbnails extrahieren, um diese auf der Webseite anzuzeigen, die dann wieder auf die echten Fotos verlinken. Das spart auf jeden Fall Ressourcen beim Laden der Webseite.
Wiederum gibt es zwei Möglichkeiten, um die eingebetteten Thumbnails zu extrahieren. Entweder man erzeugt sie zur Laufzeit und gibt sie direkt auf der Webseite aus oder man erzeugt diese Thumbnails physisch und bindet sie dann über den IMG-Tag ein.
Nachfolgend ist ein Script aufgeführt, welches ich heute mit Hilfe einiger Quellen, meist php.net, zusammengestellt habe. Für mein Vorhaben reicht das im Moment und kann durchaus durch andere genutzt werden, wenn die individuellen Parameter angepasst werden.
#!/usr/bin/php
<?php
$pfad = "/home/tuennes/help/help5/";
$bildbig = "jpg_big.jpg";
$thumbnail = "thumb_jpg_big.jpg";
// Das ist die Quelle mit dem normelen großen Bild, welches das Thumbnail beinhalten kann
$picture = $pfad.$bildbig;
// Das ist das resultierende Thumbnail, sofern das normale Bild ein Thumbnail beinhaltet
$output_file = $pfad.$thumbnail;
// Den Quellcode aus dem großen Foto für ein etwaig eingebettetes Thumbnail ausfindig machen
$image = exif_thumbnail($picture, $width, $height, $type);
// Sofern ein Thumbnail enthalten ist, wird dieser genutzt und ein Bild erstellt.
if ($image!==false) {
header('Content-type: ' .image_type_to_mime_type($type));
// Die Datei wird zum Schreiben geöffnet
$fp = fopen($output_file, "w+");
// write the data in image file
// Wichtig ist, dass die Variable $image nur den Quellcode des Thumbnails beinhaltet. Dieser Quell wird über base64_encode zunächst in Base64 kodiert,
// muss aber für die Erzeugung eines physischen Bildes dann wieder mittels base64_decode decodiert werden.
fwrite($fp, base64_decode(base64_encode($image)));
// close an open file pointer
fclose($fp);
// Ob das Bild erstellt wurde, wird sofort geprüft
if (file_exists($output_file)) {
echo "Die Datei wurde erstellt.\n";
}
else {
echo "Die Datei wurde nicht gefunden, daher wurde sie nicht estellt.\n";
}
}
// Enthielt das große Bild kein eingebettetes Thumbnail, wird eine entsprechende Meldung ausgegeben.
else {
// kein Miniaturbild vorhanden. Fehler wird hier verarbeitet
echo "Kein Miniaturbild verfügbar\n";
}
?>
Für meine Ideen ist diese einfache Art und Weise der Thumbnailerstellung sehr gut geeigent. Meine eigenen Bilder sollten alle ein Thumbnail enthalten, da ich die EXIF-Daten auf keinen Fall lösche und für meine Galerie nutzen möchte.
Die andere Variante mit der Erstellung der Thumbnails zur Laufzeit habe ich noch nicht ausprobiert.
Jopii, am 07.01.2022