Guardar y recuperar imagenes en BBDD

Chema Cortes pych3m4 en gmail.com
Lun Dic 24 05:24:45 CET 2007


El 21/12/07, Guimi <listas en guimi.net> escribió:
> Hola,
> quiero guardar imágenes en una BBDD MySQL. No una referencia a la
> imágen, a su ubicación en el disco duro, sino guardar la propia imagen
> en la base de datos.
>
> Para ello he creado una tabla de prueba con un campo BLOB para la
> imagen, un campo VARCHAR para el modo de la imagen y dos campos para
> el ancho y el alto.
>
> Guardo la imagen con un código parecido al siguiente:
> ----------------
> from PIL import Image
> (...)
> imagen = Image.open('prueba.bmp')
> imagenStr = imagen.tostring()
> imagenMode = imagen.mode
> imagenSize = imagen.size
>
> miCursor.execute("insert into prueba (bin, mode, width, height) values
> ( %s, \""+imagenMode+"\", "+str(imagenSize[0])+",
> "+str(imagenSize[1])+" ) ", imagenStr)
> (...)

Si el campo es BLOB podrías meter directamente los datos de la imagen,
sin procesar por PIL:

imagen=open('pruega.bmp','rb').read()
miCursor.execute("insert into prueba (bin, mode, width, height) values
( %s, \""+imagenMode+"\", "+str(imagenSize[0])+",
"+str(imagenSize[1])+" ) ", dbapi.Binary(imagen))

No lo he probado, pero debería funcionar. Seguramente sobre la
conversión explícita a Binary (no lo he probado).


> #Para recuperar la imagen intento:
>
> imagen2 = Image.fromstring(imagenMode, imagenSize, imagenStr)
> cajaScroll.add(imagen2)
> # Esto falla porque espera un objeto tipo gtk.Image
> # No se como generar un objeto gtk.Image desde un objeto Image (de PIL)

La solución obvia pasa por descargar la imagen que tienes en PIL a un
formato común con GTK.image


> ----------------
>
> Tambien he hecho pruebas con StringIO, con gtk.Image... no se por donde tirar...
> ¿Alguien conoce algún tutorial o alguna pista?
> ¿Alguien tiene algún código funcional de guardado y recuperación de
> imagenes en BBDD?

Tengo alguna cosa, pero para postgresql. No creo que te sea difícil
conseguir ejemplos por internet para mysql.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es