RayX
RayX

Reputation: 91

Python PIL Crop all Images in a Folder

Currently I am trying to crop all images inside a folder under the address of: C:\\Users\\xie\\Desktop\\tiff\\Bmp and then resave them into the same folder. Below is the code I am trying to experiment with, both run without error but does nothing. Also note I am using windows as platform.

Code 1:

from PIL import Image
import os.path, sys

path = "C:\\Users\\xie\\Desktop\\tiff\\Bmp"
dirs = os.listdir(path)

def crop():
    for item in dirs:
        if os.path.isfile(path+item):
            im = Image.open(path+item)
            f, e = os.path.splitext(path+item)
            imCrop = im.crop(30, 10, 1024, 1004)
            imCrop.save(f + 'Cropped.bmp', "BMP", quality=100)

crop()

Code 2:

for f in os.listdir("C:\\Users\\xie\\Desktop\\tiff\\Bmp"):
    for f in ("C:\\Users\\xie\\Desktop\\tiff\\Bmp"):
        if f.endswith('.bmp'):
            print (f, end=" ")
            i = Image.open(f)
            area = (30, 10, 1024, 1004)
            cropped_i = i.crop(area)
            cropped_i.show()
            cropped_i.save('Cropped{}.bmp', "BMP", quality=100, optimize=True)

Thanks, any help or suggestions are greatly appreciated!

Upvotes: 7

Views: 13757

Answers (2)

user1767754
user1767754

Reputation: 25094

Code 1 : Corrected

This is your corrected code, you almost had it right, you have to join the path correctly, in your code you weren't adding a separator / between the path and the filename. by using os.path.join you can combine a directory path and a filename.

Furthermore, crop takes a tuple of 4, not 4 arguments.

from PIL import Image
import os.path, sys

path = "C:\\Users\\xie\\Desktop\\tiff\\Bmp"
dirs = os.listdir(path)

def crop():
    for item in dirs:
        fullpath = os.path.join(path,item)         #corrected
        if os.path.isfile(fullpath):
            im = Image.open(fullpath)
            f, e = os.path.splitext(fullpath)
            imCrop = im.crop((30, 10, 1024, 1004)) #corrected
            imCrop.save(f + 'Cropped.bmp', "BMP", quality=100)

crop()

Upvotes: 8

Manoj Krishna Mohan
Manoj Krishna Mohan

Reputation: 122

This is more or less a rough version of code, I used with opencv, it should work the same for PIL also

import glob
import numpy as np
from PIL import Image
image_list = []
for filename in glob.glob('name_of_folder/*.jpg'): 
    im=Image.open(filename)
    image_list.append(im)
a=0
c=[]
for i in range(0,len(image_list)):
    #ur image cropping and other operations in here for each image_list[i]
    c.append(image_list[i])
    c[i].save()

Upvotes: 0

Related Questions