在Django中将一个UploadedFile转换成PIL图像

5

在保存图片之前, 我想检查它的尺寸。我不需要改变它的尺寸,只需要确保它符合我的限制。

目前,我可以正常读取文件并将其保存到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
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))

(image.width, image.height) = image.size - Lucas B

1

我以前做过这个,但是找不到我的旧片段...所以让我们从脑海中开始吧

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

StringIO对象是我在内存中暂时存储图像所缺少的东西。谢谢! - RatherBKnitting

1
下面的代码根据请求创建图像,如您所需:
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)

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