Pillow Image.save() [Errno 13] 权限被拒绝

Posted

技术标签:

【中文标题】Pillow Image.save() [Errno 13] 权限被拒绝【英文标题】:Pillow Image.save() [Errno 13] Permission denied 【发布时间】:2018-12-24 01:31:00 【问题描述】:

所以我试图在一个文件夹中循环一堆图像,做一些更改并将它们保存在一个子目录中,我遇到了权限被拒绝的问题。

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] Permission denied: 'D:/my_path/out/'

在这条线上触发错误imResize.save(path + new_folder, 'JPEG', quality=90) 知道为什么吗?

【问题讨论】:

您在 Windows 上吗?如果路径读取不正确,有时它会抛出这个错误。试试path = r'D:/my_path/' 【参考方案1】:

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)

【讨论】:

是的,我在发布此问题后立即修复了它。我很久以前写了这段代码,花了我一段时间才弄清楚发生了什么。请参阅下面关于工作代码的答案。【参考方案2】:

工作代码:

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

【讨论】:

【参考方案3】:

我遇到了类似的问题。就我而言,路径是正确的,但由于文件权限而出现问题。在Mac中,右键单击文件并选择get info,然后将权限更改为read&write

【讨论】:

以上是关于Pillow Image.save() [Errno 13] 权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

请问Python中的image.save命令怎么使用?会有啥效果

为啥 Image.Save(Stream, ImageFormat) 会抛出异常?

Image.Save()发生“GDI+ 中发生一般性错误”

使用 Image.Save() 时出现 C# Generic GDI+ 错误

GDI Image::Save 返回 Win32Error

.NET Image.Save 偶尔会生成一个带有错误 IDAT 块的 PNG