Python PIL изображение, как сохранить изображение в буфер, чтобы можно было использовать позже?

У меня есть png файл, который должен быть преобразован в jpg и сохранить в gridfs Я использую питона PIL lib, чтобы загрузить файл и выполнить преобразование, проблема в том, что я хочу сохранить преобразованное изображение в MongoDB Gridfs, в процедуре сохранения я не могу просто использовать im.save() метод. поэтому я использую StringIO держать временный файл, но он не работает.

вот фрагмент кода:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import Image
from pymongo import MongoClient
import gridfs
from StringIO import StringIO


im = Image.open("test.png").convert("RGB")

#this is what I tried, define a 
#fake_file with StringIO that stored the image temporarily.
fake_file = StringIO()
im.save(fake_file,"jpeg")

fs = gridfs.GridFS(MongoClient("localhost").stroage)

with fs.new_file(filename="test.png") as fp:
    # this will not work
    fp.write(fake_file.read())


# vim:ai:et:sts=4:sw=4:

Я очень зеленый в питоне IO механизм, как заставить это работать?

1 ответ

Решение

Использовать getvalue метод вместо read:

with fs.new_file(filename="test.png") as fp:
    fp.write(fake_file.getvalue())

В качестве альтернативы, вы можете использовать read если ты первый seek(0) читать с начала StringIO.

with fs.new_file(filename="test.png") as fp:
    fake_file.seek(0)
    fp.write(fake_file.read())
Другие вопросы по тегам