Я пишу программу с использованием PyQt4 для интерфейсного графического интерфейса, и эта программа обращается к внутренней базе данных (которая может быть либо MySQL, либо SQLite). Мне нужно хранить некоторые данные изображения в базе данных и ниже код Python я использовать для импорта файлов изображений (в формате JPEG) в поле данных BLOB в базе данных:Загрузить данные изображения блоба в QPixmap
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 ул в базе данных - cPickle & StringIO -> PIL Изображение объекта
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 Image -> файл временного изображения
(3) Файл временного изображения -> QPixmap
Этот подход также отлично работает. Но было бы лучше, если бы мне не приходилось писать/читать временные файлы изображений, что может замедлить реакцию программы на взаимодействие с пользователем. Я думаю, я мог бы использовать QPixmap::loadFromData() для прямой загрузки из данных blob, хранящихся в базе данных, и надеюсь, что кто-то здесь может показать мне пример того, как использовать эту функцию.
ТИА,
Bing
Почему вы даже используете шаг PIL? Qt отлично справляется с загрузкой данных в формате JPEG: http://docs.huihoo.com/pyqt/pyqt4/html/qpixmap.html#reading-and-writing-image-files – balpha
Я уверен, что Qt может загружать данные JPEG. Я ищу фрагмент кода, который преобразует строку, закодированную в поле blob, в объект QPixmap. Благодаря! –
Я понял, что могу просто использовать QPixmap :: loadFromData (cPickle.loads (s)), где s - строковые данные, полученные из поля blob. Спасибо за помощь. –