-
»Kleine« Bilder löschen
Geschrieben am 10. September 2009 4 KommentareIch 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:
Ich 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. Mitidentify -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.
Kommentare:
-
Hallo, mit identify kannste bequem hight und width eines Bildes herausbekommen:
auflsgx=$(identify -format “%w” “$image”)
auflsgy=$(identify -format “%h” “$image”)
damit kannste dir die Arbeit mit sed sparen
-
Danke für den Hinweis, tuantub, da hast du recht! Habe das Skript angepasst. Jetzt kommt man im Grundgerüst sogar ohne sed aus
-
Patrick Schwalm 10. September 2009 um 14:05
Hi,
ein sehr nützliches Skript wie ich finde!
Villeicht könntest du dich auch mit den Leuten von Photorec zusammentun, dieses Skript gehört irgendwo auf deren Seite.Ich selber habe mal mit Photorec meine Photos einer Festplatte wiederhergestellt und da kommt wirklich ein unglaubliches Mischmasch raus, ein solches Skript ist dann unglaublich hilfreich um zumindest ein wenig Ordnung zu schaffen!
Greetz
1 Trackbacks / Pingbacks
-
[...] edit: Jetzt passt der Link (Sonderzeichen aus dem Slug entfernt): http://www.be-jo.net/de/2009/09/kleine-bilder-loschen/ [...]
Einen Kommentar schreiben:
-


tuantub 10. September 2009 um 03:56