Python PIL裁剪文件夹中的所有图像

时间:2017-12-13 05:13:41

标签: python image python-imaging-library

目前我正在尝试裁剪地址为C:\\Users\\xie\\Desktop\\tiff\\Bmp的文件夹内的所有图片,然后将它们重新保存到同一文件夹中。下面是我试图尝试的代码,它们都运行没有错误但什么也没做。另请注意,我使用Windows作为平台。

代码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()

代码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)

谢谢,非常感谢任何帮助或建议!

2 个答案:

答案 0 :(得分:0)

这或多或少是一个粗略的代码版本,我用的是opencv,它应该对PIL也一样

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()

答案 1 :(得分:0)

代码1:更正

这是您更正后的代码,几乎是正确的,您必须正确加入路径,在您的代码中,您并未在路径和文件名之间添加分隔符/。使用os.path.join,您可以评论directory pathfilename

此外,裁剪采用4的元组,而不是4个参数。

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()