2017-11-05 1 views
-1

Ich habe einen Ordner namens/Gallery/und es hat Unterordner mit vielen Bildern darin, und ich muss alles mit einer Breite von 800px Größe ändern.Wie ändere ich die Größe aller Bilder mit PIL und Wartungsverhältnis?

Wie kann ich den Prozess automatisieren ich diesen Code bin mit:

from PIL import Image 

basewidth = 800 
img = Image.open('imagename.jpg') 
wpercent = (basewidth/float(img.size[0])) 
hsize = int((float(img.size[1])*float(wpercent))) 
img = img.resize((basewidth,hsize), Image.ANTIALIAS) 
img.save('imagename.jpg') 

in der Galerie in jedem Ordner etwas wie für jedes Bild zu tun rezizepicture

Danke !.

Antwort

0

für Python 3.5+

import glob  
from PIL import Image 

for infile in glob.glob("/Gallery/**/*.jpg", recursive=True): 

    basewidth = 800 
    img = Image.open(infile) 
    wpercent = (basewidth/float(img.size[0])) 
    hsize = int((float(img.size[1])*float(wpercent))) 
    img = img.resize((basewidth,hsize), Image.ANTIALIAS) 
    img.save(infile) 
+0

Dieser Code wird die Dateien in keinem der Unterordner zurückgeben. – Eric

+0

Ich ändere es in "/Gallery/*/*.jpg", um über Dateien in Unterordnern – Ibrahim

+0

"/ Gallery/*/*. Jpg" 'Dateien werden in der obersten Ebene-Verzeichnis zu verpassen, deshalb habe ich [Path. rglob()] (https://docs.python.org/3/library/pathlib.html#pathlib.Path.rglob). – Eric

0

können Sie verwenden os.listdir (Pfad), um alle Dateien in einem Verzeichnis zu erhalten, und os.path.join (Verzeichnis, Dateiname) den gesamten Pfad zu erhalten, eine Datei. Verwenden Sie dann eine Schleife wie "for fileName in os.listdir (directory):", um die gesamte Datei im Verzeichnis zu durchlaufen. Möglicherweise möchten Sie eine Überprüfung hinzufügen, um sicherzustellen, dass Sie nur mit JPG-Dateien arbeiten. In der Schleife verwenden Sie Ihren bereits geschriebenen Code als Anfang. Ich würde die vorhandenen Bilder nicht überschreiben, außer Sie haben sie irgendwo gesichert.

0

Um die Dateien, die einem bestimmten Muster entsprechen, zu durchlaufen, können Sie die Globs in pathlib verwenden. Hier ist ein Beispiel, das alle Dateien mit einer jpg Erweiterung in allen Unterverzeichnissen identifiziert.

>>> import pathlib 
>>> p = pathlib.Path(".\Gallery") 
>>> for img_file in p.rglob("*.jpg"): 
... print(img_file) 
... 
Gallery\top1.jpg 
Gallery\top2.jpg 
Gallery\sub1\sub1.jpg 
Gallery\sub2\sub2.jpg 
Gallery\sub2\sub3.jpg 
Gallery\sub3\sub4.jpg 
Verwandte Themen