Преобразование загруженного файла в изображение PIL в Django - PullRequest
5 голосов
/ 23 сентября 2011

Я пытаюсь проверить размер изображения, прежде чем сохранить его. Мне не нужно менять его, просто убедитесь, что он соответствует моим ограничениям.

Прямо сейчас я могу прочитать файл и сохранить его в AWS без проблем.

output['pic file'] = request.POST['picture_file']
conn = myproject.S3.AWSAuthConnection(aws_key_id, aws_key)
filedata = request.FILES['picture'].read()
content_type = 'image/png'
conn.put(
        bucket_name,
        request.POST['picture_file'],
        myproject.S3.S3Object(filedata),
        {'x-amz-acl': 'public-read', 'Content-Type': content_type},
        )

Мне нужно поместить шаг посередине, чтобы убедиться, что файл имеет правильный размер / ширину. Мой файл не приходит из формы, которая использует ImageField, и все решения, которые я видел, используют это.

Есть ли способ сделать что-то вроде

img = Image.open(filedata)

Ответы [ 3 ]

3 голосов
/ 25 сентября 2011
image = Image.open(file)
#To get the image size, in pixels.    
(width,height) = image.size() 
#check for dimensions width and height and resize
image = image.resize((width_new,height_new))
1 голос
/ 23 декабря 2013

Код ниже создает изображение из запроса, как вы хотите:

from PIL import ImageFile
def image_upload(request):
    for f in request.FILES.values():
        p = ImageFile.Parser()
        while 1:
            s = f.read(1024)
            if not s:
                break
            p.feed(s)
        im = p.close()
        im.save("/tmp/" + f.name)
1 голос
/ 23 сентября 2011

Я уже делал это раньше, но я не могу найти свой старый фрагмент ... так что мы идем с макушки головы

picture = request.FILES.get['picture']
img = Image.open(picture)
#check sizes .... probably using img.size and then resize

#resave if necessary
imgstr = StringIO()
img.save(imgstr, 'PNG') 
imgstr.reset()

filedata = imgstr.read()
...