Я пишу программу, использующую PyQt4 для внешнего интерфейса, и эта программа обращается к внутренней базе данных (которая может быть MySQL или SQLite). Мне нужно сохранить некоторые данные изображения в базе данных, и ниже приведен код Python, который я использую для импорта файлов изображений (в формате JPEG) в поле данных BLOB-объектов в базе данных:
def dump_image(imgfile):
i = open(imgfile, 'rb')
i.seek(0)
w = i.read()
i.close()
return cPickle.dumps(w,1)
blob = dump_image(imgfile)
hex_str = blob.encode('hex')
# x"%s"%hex_str will be the string inserted into the SQL command
Эта часть отлично работает. Мой вопрос о том, как создать объект QPixmap из данных изображений, хранящихся в базе данных в PyQt4. Мой текущий подход включает в себя следующие шаги:
(1) Hex str в базе данных - cPickle & StringIO -> PIL Image Object
def load_image(s):
o = cPickle.loads(s)
c = StringIO.StringIO()
c.write(o)
c.seek(0)
im = Image.open(c)
return im
(2) Объект изображения PIL -> Временный файл изображения
(3) Временный файл изображения -> QPixmap
Этот подход также отлично работает. Но было бы лучше, если бы мне не приходилось писать / читать временные файлы изображений, которые могут замедлить реакцию программы на взаимодействие с пользователем. Я полагаю, что мог бы использовать QPixmap :: loadFromData () для прямой загрузки из данных BLOB-объектов, хранящихся в базе данных, и надеюсь, что кто-то здесь может показать мне пример использования этой функции.
ТИА
Bing