Pillow图像保存() [Errno 13] 权限被拒绝

5

我正在尝试循环遍历一个文件夹中的一堆图片,做一些更改并将它们保存在子目录中,但是我遇到了权限被拒绝的问题。

from PIL import Image
import os

path = 'D:/my_path/'


dirs = os.listdir( path )

new_folder = 'out'

if not os.path.exists(path + new_folder):
    os.makedirs(path + new_folder)

def resize():
    num=0
    for item in dirs:

        #print(path + item)
        if os.path.isfile(path+item):
            im = Image.open(path+item).convert('RGB')

            imResize = im.resize((64, 64), Image.ANTIALIAS)
            im.Resize = os.rename(os.path.join(path, item),os.path.join(path, 'bad_' + str(num)) )
            imResize.save(path + new_folder, 'JPEG', quality=90)

            num+=1
        #if num > 1000:
            #break
resize()

PermissionError: [Errno 13] 权限被拒绝:'D:/my_path/out/'

错误发生在这一行 imResize.save(path + new_folder, 'JPEG', quality=90)。你知道为什么吗?


你在使用Windows吗?如果路径读取不正确,有时会抛出此错误。尝试使用path = r'D:/my_path/' - Wald
3个回答

4

imResize.save(path + new_folder, 'JPEG', quality=90)

对我来说看起来不太对。您有一个名为D:/my_path/out的目录,而在此处您正在尝试将文件保存到同名目录D:/my_path/out中。那已经是一个目录了,所以您不能使用相同的名称保存文件。

尝试选择一个文件名称,不要与现有目录的名称冲突。

outputfilename = os.path.join(path, new_folder, "myoutputfile_{}.jpg".format(num))
imResize.save(outputfilename, 'JPEG', quality=90)

1
是的,我在发布这个问题后立即解决了它。我写了这段代码很久以前,花了我一段时间才弄清楚发生了什么。请查看下面关于可工作代码的答案。 - Inkplay_

1
工作代码:
rename = 'bad_img_'

def resize():
    num=0
    for item in dirs:
        if os.path.isfile(path+item):
            im = Image.open(path+item).convert('RGB')
            imResize = im.resize((64, 64), Image.ANTIALIAS)
            imResize.save(os.path.join(save_dir, rename + str(num)) + '.JPG', 'JPEG', quality=90)
            num+=1

resize()

0
我曾经遇到类似的问题。在我的情况下,路径是正确的,但问题出现在文件权限上。在 Mac 上,右键单击文件并选择 获取信息,然后更改权限为 读取和写入

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接