Получено Errno 13 при попытке сохранить изображение с помощью Pillow [Python, Django]

При попытке сохранить изображения с помощью Pillow получена ошибка [Errno 13]. Точная ошибка такова: PermissionError: [Errno 13] Permission Denied: 'C:/Users/django/PycharmProjects/django/csvs/photos/blah-summer-jean\cropped-788x1000'. Мой код ниже:

from PIL import Image
from blah import settings
from django.core.files.storage import default_storage
from blah.storage_backends import MediaStorage
import os

app_storage = None
image_dir = 'C:/Users/django/PycharmProjects/sassigen/csvs/photos/blah-summer-jean'
cropped_dir = 'C:/Users/django/PycharmProjects/sassigen/csvs/photos/blah-summer-jean/cropped-788x1000'

if settings.DEBUG:
    app_storage = default_storage
else:
    app_storage = MediaStorage


def crop_image(image):
    try:
        img = Image.open(image)
        width, height = img.size
        if width <= 788 and height <= 1000:
            pass
        else:
            xcenter = img.width / 2
            ycenter = img.height / 2
            x1 = xcenter - 488
            y1 = ycenter - 600
            x2 = xcenter + 488
            y2 = ycenter + 600
            image_to_crop = img.crop((int(x1), int(y1), int(x2), int(y2)))
            output_size = (788, 1000)
            final_image = image_to_crop.resize(output_size)
            img.close()
            return final_image
    except AttributeError:
        pass
    except Exception as e:
        raise e


for each_image in os.listdir(image_dir):
    cropping = crop_image(os.path.join(image_dir, each_image))
    if not os.path.exists(cropped_dir):
        os.mkdir(cropped_dir)
    cropping.save(os.path.join(cropped_dir, each_image), 'jpeg')

Черт, только что нашел решение самостоятельно. Вместо os.mkdir мне нужно использовать os.makedirs - потому что я именовал свой путь в коде прямым слешем вместо обратного слеша.

Рабочий код:

from PIL import Image
from blah import settings
from django.core.files.storage import default_storage
from blah.storage_backends import MediaStorage
import os
import imghdr

app_storage = None
image_dir = 'C:/Users/django/PycharmProjects/sassigen/csvs/photos/blah-summer-jean'
cropped_dir = 'C:/Users/django/PycharmProjects/sassigen/csvs/photos/blah-summer-jean/cropped-788x1000'

if settings.DEBUG:
    app_storage = default_storage
else:
    app_storage = MediaStorage

def crop_image(image):
    try:
        img = Image.open(image)
        width, height = img.size
        if width <= 788 and height <= 1000:
            pass
        else:
            xcenter = img.width / 2
            ycenter = img.height / 2
            x1 = xcenter - 488
            y1 = ycenter - 600
            x2 = xcenter + 488
            y2 = ycenter + 600
            image_to_crop = img.crop((int(x1), int(y1), int(x2), int(y2)))
            output_size = (788, 1000)
            final_image = image_to_crop.resize(output_size)
            img.close()
            return final_image
    except AttributeError:
        pass
    except Exception as e:
        raise e


for each_image in os.listdir(image_dir):
    if imghdr.what(os.path.join(image_dir, each_image)) == 'jpeg':
        cropping = crop_image(os.path.join(image_dir, each_image))
        if not os.path.exists(cropped_dir):
            os.makedirs(cropped_dir)
        cropping.save(os.path.join(cropped_dir, each_image), 'jpeg')
Вернуться на верх