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