2014-01-25 2 views
0

Я хотел бы создать эскиз с изображения, а затем вставить этот значок в SQLite как BLOB. (без сохранения миниатюры в качестве файла сперва)Создать эскиз изображения и вставить в SQLite как blob

Мой код;

from PIL import Image 

size = 120,120 
file = "a.jpg" 

imgobj = Image.open(file)   
imgobj.thumbnail(size) 

Но как сохранить его в SQLite в качестве BLOB

ответ

1

Ну, есть много способов, и это один из них:

import sqlite3 
from PIL import Image 

size = 120, 120 
file = "/tmp/a.jpg" 
imgobj = Image.open(file) 
imgobj.thumbnail(size) 

con = sqlite3.connect("/tmp/imagesdb") 
cur = con.cursor() 
cur.execute("create table img (x blob)") 
cur.execute("insert into img(x) values(?)", [ buffer(imgobj.tostring()) ]) 
con.commit() 
cur.close() 
con.close() 

# read it back. 
con = sqlite3.connect("/tmp/imagesdb") 
cur = con.cursor() 
row = cur.execute('SELECT * FROM img') 
for item in row: 
    print item #dont worry just pointers to files... 
    #print item[0] # has actually binary contents. 
+0

[буфер (imgobj.tostring())] сделал трюк. Бесконечно благодарен !! –

+0

Это почти сделано, но странная ошибка. Я изменил это: cur.execute ("create table img (f text, x blob)") cur.execute ("insert into img (f, x) values ​​(?,?)", File, [buffer (imgobj.tostring())]), но я получаю сообщение об ошибке: cur.execute ("insert into img (f, x) values ​​(?,?)", file, [buffer (imgobj.tostring())]) TypeError : функция принимает не более 2 аргументов (3 данных) –

+0

при ее изменении следующим образом: cur.execute ("create table img (f text, x blob)") cur.execute ("insert into img (f, x)" (?,?) ", (файл, [buffer (imgobj.tostring())])) ошибка: cur.execute (" insert into img (f, x) values ​​(?,?) ", (file, [buffer (imgobj.tostring())])) InterfaceError: параметр привязки ошибки 1 - возможно, неподдерживаемый тип. –

Смежные вопросы