Mal ein kurzer Artikel am Rande, in den vergangenen Tagen ist mein Blog auf einen neuen Server umgezogen. Und keiner hat`s gemerkt :)

Aber darum geht es hier nicht, beim Umzug sind mir meine Gallery Ordner im Wordpress aufgefallen. Dort hortet dieses unheimlich langsame CMS seit 2009 alle Bilder in allen möglichen Auflösungen. Das Problem  ist das hier wirklich Gigabyte Weise Daten gehortet werden die ich so online eigentlich gar nicht brauche. Viele CMS Systeme haben die Angewohnheit auch die Originaldatei mit zu speichern, sprich wenn man diese nicht vorher optimiert oder beschneidet sind das einige MB pro Datei. Mein WP Ordner war nun also einige GB groß und das kopieren auf den neuen Server wollte ich mir sparen. Raus kam ein kleines nützliches Shell Script was ich gerne hier zur Verfügung stelle um euch ggf. auch mal von eurer Bilderflut zu erlösen.

Das Script rechnet alle Bilder welche größer als Full HD sind auf 1920 Pixel Breite runter und lässt anschließend ein JPEG Optimierer drüber laufen. Hat bei mir 60% meiner WP Installation mal so eben weg reduziert. Das ganze ist für Linux und benötigt ImageMagick und jpegtrans installiert. Beides sollte in der Repo eurer wahl vorhanden sein. Zur Anwendung einfach dieses Script in das Verzeichnis mit den zu optimierenden Bildern werfen und ausführen. Es werden alle Unterordner recursive mit verwurschtelt also passt auf wo man es startet, immer die Originalen vorher lokal sichern!

Lange Rede kurzer Schluß, hier das Script:

#!/bin/bash
# Mass jpeg optimization by Marco Goetze
# www.solariz.de
# License: GL HF
#
SIZE_TOTAL=0
SAVED_TOTAL=0
FILES_TOTAL=0
SKIP_TOTAL=0

for file in $(find ** -type f -iname '*.jpg' )
do
    local fdir=${file%/*}
    local fname=${file*/}
    local FILESIZE=$(stat -c%s "$file")
    echo -n "$fname: "
    SIZE_TOTAL=$(($SIZE_TOTAL+$FILESIZE))
    FILES_TOTAL=$(($FILES_TOTAL+1))
	# Ueberspringen wenn File zu klein,
	# Optimierung lohnt sich hier nicht
	if [ "$FILESIZE" -lt "10000" ]
	then
		echo -skip- to small
		SKIP_TOTAL=$(($SKIP_TOTAL+1))
		continue
	fi
	# Per ImageMagick auf FullHD Aufloesung shrinken
	# Bild wird um platz zu sparen auf 1980 Breite angepasst,
	# Ratio und Aussschnitt bleiben unveraendert
	local targetc=$(tempfile --prefix=jpc_)
	convert -resize 1920\> "$file" $targetc
	# Nun per JpegTrans optimieren.
	# ACHTUNG Exif Daten gehen dabei verloren
	local target=$(tempfile --prefix=jpo_)
	jpegtran -trim -optimize -copy none "$targetc" > $target
	# nun berechnen ob wir was gespart haben,
	# wenn nicht wird die Optimierung verworfen und wir
	# lassen das Original unangetastet.
	local FILESIZEC=$(stat -c%s "$target")
	local diff=$(($FILESIZE - $FILESIZEC))
	if [ "$diff" -gt "640" ]
	then
		local saved=$(($diff/1024))
		SAVED_TOTAL=$(($SAVED_TOTAL+$saved))
		echo Saved $saved k
		mv -f -u $target "$file"
	else
		echo -skip- No Saving
		SKIP_TOTAL=$(($SKIP_TOTAL+1))
	fi
	# Aufraeumen
	rm $target >/dev/null 2>/dev/null
	rm $targetc >/dev/null 2>/dev/null
done
# Ergebnis
echo Files  : $FILES_TOTAL
echo Skipped: $SKIP_TOTAL
echo Before : $(($SIZE_TOTAL/1024/1024)) M
echo Saved  : $SAVED_TOTAL k

✉ MG// CEST

Follow Icon
Don’t miss out and subscribe by email:
Don't worry! NO Spam and FREE; Receive a summarizing email for new posts, easy to unsubscribe at any time.
← Other Blog Posts