如何在上传时使用PIL调整图像大小,并在烧瓶中混浊?

时间:2018-11-16 11:50:40

标签: python flask python-imaging-library

我当前的解决方案无法正常工作。我需要从formdata获取图像,调整图像大小并使用flask-cloudy上传到本地文件服务器。如何将_io.BufferedWriter转换回文件对象?

和源代码:

def image_add():
    if request.method == 'POST':
        if 'username' in session:
            file = request.files['image']
            print(file, file=sys.stderr)
            uploadId=str(uuid.uuid4())
            source = storage.upload(file, name=uploadId, extension=["jpeg","jpg","png"], overwrite=False, public=True)
            image_request_result = requests.get(source.full_url)
            image = Image.open(io.BytesIO(image_request_result.content))
            width, height = image.size
            max_size = [200, 200]
            image_io = io.BytesIO()
            image.save(image_io, format='JPEG')
            with open('%s_%s.jpeg' % (uploadId, '200x200'), 'wb') as file_output:
                print(file_output, file=sys.stderr)
                source0 = storage.upload(file_output, name=uploadId, extension=["jpeg","jpg","png"], overwrite=False, public=True)
                print(source0, file=sys.stderr)
            resp = json.dumps({
                "id": uploadId,
                "url": source.url,
                "full_url": source.full_url
            })
            return Response(resp, status=201, mimetype='application/json')
        else:
            return Response("Not authorized", status=401, mimetype='application/json')
    else:
        return Response("{request.method} is not allowed!", status=400, mimetype='application/json')

谢谢!

1 个答案:

答案 0 :(得分:0)

最后,我做到了!希望下面的答案对使用相同库的人以及需要创建缩略图并将其存储在某处的人有所帮助。

烧瓶多云希望我们通过 文件 路径/至/file.string 。我发现的唯一解决方案是获取请求的文件,使用PIL打开,创建,将其保存为字节,将这些字节写入文件并将此文件路径传递给Flask Cloudy。

解决方案:

def image_add():
if request.method == 'POST':
    if 'username' in session:
        file = request.files['image']
        img_sizes = [(128,128),(300,300),(800,600)]
        uploadId=str(uuid.uuid4())
        prefix = uploadId + '/'
        source = storage.upload(file, name=uploadId, prefix=prefix, extension=["jpeg","jpg","png"], overwrite=False, public=True)

        for size in img_sizes:
            image = Image.open(file)
            image_io = io.BytesIO()
            image.thumbnail(size)
            image.save(image_io, 'jpeg')
            thumbName = '%s_%s.jpg' % (uploadId, str('x'.join(tuple(map( str , size )))))
            with open(thumbName, 'wb') as file_output:
                file_output.write(image_io.getvalue())
                file_output.close()
                source0 = storage.upload(thumbName, name=thumbName, prefix=prefix, extension=["jpeg","jpg","png"], overwrite=False, public=True)
                os.remove(thumbName)

        resp = json.dumps({
            "id": uploadId,
            "url": source.url
        })