Как я могу изменить размер изображения с PIL при загрузке и обслуживать их с помощью облачно-фляги? - PullRequest
0 голосов
/ 16 ноября 2018

Мое текущее решение не работает, как ожидалось. Мне нужно получить изображение из formdata, изменить его размер и загрузить на локальный файловый сервер, используя флеш-облачность. Как я могу преобразовать _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 голосов
/ 20 декабря 2018

Наконец-то я это сделал!Надеюсь, что приведенный ниже ответ будет полезен для тех, кто использует те же библиотеки, и для кого-то, кому нужно создавать эскизы и хранить их где-то.1006 * или Путь / к / 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
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...