在Django中将UploadedFile转换为PIL图像

5 投票
3 回答
3335 浏览
提问于 2025-04-17 02:56

我想在保存图片之前检查一下它的尺寸。我不需要改变它,只是想确认它符合我的要求。

现在,我可以顺利读取文件,并将其保存到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 个回答

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

撰写回答