»Kleine« Bilder löschen

Ich habe einen Ordner auf dem PC, in dem tummeln sich tausende Bilder. Diese Bilder haben alle unterschiedliche Auflösungen und Namen, es ist kein System erkennbar. Aber ich möchte nicht alle Bilder behalten, sondern “kleine Bilder” löschen. Kleine Bilder haben eine geringe Auflösung in diesem Fall.
Dazu habe ich es erst mit Nautilus versucht: Über einen Rechtsklick habe ich das Kontextmenü geöffnet und dort die Sortiereinstellung “Größe” gewählt. Anschließend wurden die Bilder nach Dateigröße sortiert dargestellt. Das war ja schon der halbe Weg. Allerdings klappte diese Methode nur bei den Minibildern (einstelliger Kilobytebereich). Sobald es bei etwa 50kB angekommen war, war die Dateigröße kein Maß mehr für dich Auflösung, da die Bildqualität eine Rolle spielte. Konkret: Manche Bilder mit höherer Auflösung hatten einen kleineren Speicherbedarf als andere Bilder mit sehr geringer Auflösung.

 

Leider bietet Nautilus keine Möglichkeit, Bilder nach der Auflösung zu sortieren. Folglich musste ich stärkere Geschütze auffahren:

imagemagickIch fand im mächtigen Programm imagemagick ein Tool, dass es ermöglicht, die Auflösung von Bildern in der Konsole auszulesen. Mit diesem Tool und weiten Helferchen konnte ich nun ein Skript schreiben, das alle Bilder eines Ordners untersucht, die Auflösung ansieht und entscheidet, ob es ein »kleines« oder ein »großes« Bild ist. Dementsprechend handelt es dann. Das Skript sieht folgendermaßen aus und benötigt ein paar Programme, die man normalerweise aus den Repositories bekommt:

sudo apt-get install imagemagick

Das Skript

siehe dazu auch hier.

#!/bin/bash
minpixel=307200; # Gibt die minimale Pixelzahl an. Orientierung hierbei an 640x480
zahl=0
zahlpur=0
for i in *.jpg # Bot sich an, da es sich ausschließlich um JPEG handelte
do
auflsgx=$(identify -format '%w' "$i");
auflsgy=$(identify -format '%h' "$i");
auflsg=$[$auflsgx*$auflsgy];
if [ "$auflsg" -lt "$minpixel" ]; then
echo "Bild: ${auflsgx}x$auflsgy $auflsg Pixel $i";
zahl=$[$zahl+1];
rm $i;
fi
zahlpur=$[$zahlpur+1];
done
echo "$zahl von $zahlpur Bildern wurden bearbeitet";

Die Möglichkeiten sind nun fast uneingeschränkt! Über neue sed-Befehle kann man die Bedingungen beliebig verändern, etwa die Farbtiefen und so weiter. Mit

identify -verbose "$i"

sieht man noch viel mehr Details der Bilder, nach denen man die Bilder aussortieren kann. Auch andere Verarbeitung (neben löschen) sind mit diesem Grundgerüst kein Problem.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert