ubuntuusers.de

python /skript zum bilder verkleinern

Status: Gelöst | Ubuntu-Version: Ubuntu 8.04 (Hardy Heron)
Antworten |

miststueck

Anmeldungsdatum:
1. Juni 2007

Beiträge: 214

Wohnort: Bochum

ich will sämtliche Albencover in meinem musikordner zwecks platzersparnis (für den ipod) einschrumpfen, leider funzt mein skript nicht so richtig.

1
2
3
4
5
6
7
8
9
from PIL import Image
import glob, os

size = 240, 240

for infile in glob.glob("/*/*.jpg"):
    im = Image.open(infile)
    im.thumbnail(size, Image.ANTIALIAS)
    im.save("cover_neu.jpg", "JPEG")

folgende probleme: 1) das neue bild soll im selben ordner gespeichert werden wie das alte, es landet aber im selben ordner wie das skript. 2) meine unterordner enthalten leerzeichen und das je nach band/album unterschiedlich viele. ich habs bereits mit ./name\mitleerzeichen/*.jpg versucht aber das klappt nicht. wie müßte ich zb diese pfad umbauen: ./Bishop/Suicide Party/*.jpg

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

import os
from PIL import Image

NEW_SIZE = (240, 240)

for root, dirnames, filenames in os.walk(os.getcwd()):
    for filename in filenames:
        name, ext = os.path.splitext(filename)
        if not ext == '.jpg':
            continue
        image = Image.open(os.path.join(root, filename))
        image.thumbnail(NEW_SIZE, Image.ANTIALIAS)
        image.save(os.path.join(root, name + '_small' + ext), 'JPEG')

miststueck

(Themenstarter)

Anmeldungsdatum:
1. Juni 2007

Beiträge: 214

Wohnort: Bochum

cool, danke. wenn du mir das ganze jetzt noch in kommentierter form geben könntest (zwecks lernen) wär ich dir auf ewig dankbar. 😉

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Ok, ganz kurz:

os.walk() in Zeile sechs erzeugt einen Generator, der rekursiv das übergebene Verzeichnis durchläuft (in diesem Fall os.getcwd() für das aktuelle Arbeitsverzeichnis) durchläuft. root ist das aktuell besuchte Verzeichnis, filenames eine Liste aller darin enthaltenen Dateinamen, dirnames eine Liste aller darin enthaltenen Verzeichnisnamen. Zeile sieben durchläuft dementsprechend alle Dateinamen.

Zeile acht trennt den Dateinamen an der Dateierweiterung, Zeile neun überprüft die Dateierweiterung. Falls diese nicht .jpg lautet, springt Zeile zehn in den nächsten Durchlauf der inneren Schleife über alle Dateinamen. Andernfalls geht es mit Zeile elf weiter.

Dort wird dann der Dateiname mittels os.path.join() mit dem Pfad des aktuell besuchten Verzeichnisses verknüpft, um einen absoluten Pfad zu erhalten. Der Rest ist ebenso wie die nächste Zeile das gleiche wie in deinem Skript.

In der letzten Zeile wird schließlich der Name des Zielbilds zusammengesetzt und analog zu Zeile elf zu einem absoluten Pfad gemacht.

miststueck

(Themenstarter)

Anmeldungsdatum:
1. Juni 2007

Beiträge: 214

Wohnort: Bochum

wieder was gelernt ☺ und ich mußte mich nicht codebröcken für codebröckchen durch die python doku arbeiten. auf jeden fall eleganter als mein (auch nur geklautes) skript.

derhannes

Anmeldungsdatum:
23. März 2006

Beiträge: 24

Folgender Bash-Einzeiler könnte auch interessant sein:

1
mogrify -resize 320x240 *.jpg

Na gut, er benennt nicht um.

Antworten |