Die Herausforderung
Fotos sind oft viel zu groß (sowohl in der Auflösung, als auch in der Dateigröße) um auf einer Webseite angezeigt zu werden. Unter Umständen benötigt man auch ein Bild in verschiedenen Größen (z.B. für Teaser ein kleines, für den Artikel ein größeres Bild).
Lösung: ImageMagick und ein kleines Skript
ImageMagick wird bei den meisten Linux-Distributionen als Paket mitgeliefert und muss gegebenenfalls nachinstalliert werden (hier für Debian).
apt-get install imagemagick
Das Skript wandelt nun ein gegebenes Bild in 4 Bilder in unterschiedlichen Größen um. In meinem Beispiel in folgende Größen (wobei die Angaben für Breite und Höhe der jeweilige Maximalwert sind und das Seitenverhältnis erhalten bleibt):
- Small 200x200
- Medium 500x500
- Large 1000x1000
- XLarge 1500x1500
#!/bin/bash
# Pfad zum Programm
convertProgram=/usr/bin/convert
function doConvert {
inputFile=$1
formatExtension=$2
convertOptions=${@:3}
pathName=`echo "$inputFile" | rev | cut -d'.' -f1 --complement | rev`
ext=`echo "$inputFile" | rev | cut -d'.' -f1 | rev`
newFile=$pathName
newFile+=$formatExtension
newFile+="."
newFile+=$ext
$convertProgram "$inputFile" $convertOptions "$newFile"
# Hier noch die Berechtigungen für die Datei passend für den Webserver setzen
chown www-data:www-data $newFile
}
doConvert "$1" "_s" -resize '200x200'
doConvert "$1" "_m" -resize '500x500'
doConvert "$1" "_l" -resize '1000x1000'
doConvert "$1" "_xl" -resize '1500x1500'
createimages /var/www/images/meinbild.jpg
-rw-r--r-- 1 www-data www-data 2613955 Dez 9 10:59 meinbild.jpg
-rw-r--r-- 1 www-data www-data 153301 Dez 16 12:37 meinbild_l.jpg
-rw-r--r-- 1 www-data www-data 46710 Dez 16 12:37 meinbild_m.jpg
-rw-r--r-- 1 www-data www-data 13254 Dez 16 12:37 meinbild_s.jpg
-rw-r--r-- 1 www-data www-data 363205 Dez 16 12:37 meinbild_xl.jpg