Seite 1 von 1

Bild in Datenbank speichern, auslesen und anzeigen

Verfasst: Dienstag 1. Mai 2007, 13:39
von sprudel
Hi.

Ich möchte ein Bild erst mit open öffnen, dann den Inhalt in eine Sqlite Datenbank speichern. Soweit so gut. Jetzt möchte ich das Bild aber wieder auslesen, so dass ich den Inhalt in einer Variable habe. Wie kann ich das dann in ein wx.Bitmap oder wx.Image umwandeln?

Hoffe ihr wisst da weiter.

Gruß sprudel

Re: Bild in Datenbank speichern, auslesen und anzeigen

Verfasst: Dienstag 1. Mai 2007, 22:46
von gerold
sprudel hat geschrieben:Jetzt möchte ich das Bild aber wieder auslesen, so dass ich den Inhalt in einer Variable habe.
Hi sprudel!

z.B. so:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

try:
    import sqlite3
except ImportError:
    from pysqlite2 import dbapi2 as sqlite3
import wx
from StringIO import StringIO

wx.SetDefaultPyEncoding("iso-8859-15")


class MyDatabase(object):
    
    def __init__(self):
        self.conn = sqlite3.connect(":memory:")
        
        # Nur zu Demozwecken:
        self.create_stucture()
        self.insert_image(file("test.jpg", "rb").read())
    
    
    def create_stucture(self):
        conn = self.conn
        sql = """
        CREATE TABLE images (
            id INTEGER PRIMARY KEY,
            image TEXT
        )
        """
        conn.execute(sql)
        conn.commit()
    
    
    def insert_image(self, image):
        conn = self.conn
        sql = """
        INSERT INTO images (image) VALUES (?)
        """
        binary = sqlite3.Binary(image)
        conn.execute(sql, (binary, ))
        conn.commit()
    
    
    def get_first_image(self):
        conn = self.conn
        sql = """
        SELECT image FROM images LIMIT 1
        """
        cur = conn.cursor()
        cur.execute(sql)
        
        return cur.fetchone()[0]


class MyFrame(wx.Frame):
    
    def __init__(
        self, parent = None, id = -1, title = "Example", size = wx.Size(550, 420)
    ):
        
        wx.Frame.__init__(self, parent, id, title, size = size)
        
        self.db = MyDatabase()
        
        panel = wx.Panel(self)
        
        vbox_main = wx.BoxSizer(wx.VERTICAL)
        panel.SetSizer(vbox_main)
        
        self.statbmp = wx.StaticBitmap(panel)
        vbox_main.Add(self.statbmp, 1, wx.EXPAND | wx.ALL, 10)
        
        self.get_image()
    
    
    def get_image(self):
        image_stream = StringIO(self.db.get_first_image())
        image = wx.ImageFromStream(image_stream, type = wx.BITMAP_TYPE_JPEG)
        bitmap = wx.BitmapFromImage(image)
        
        self.statbmp.SetBitmap(bitmap)


def main():
    """Testing"""
    
    app = wx.PySimpleApp()
    f = MyFrame()
    f.Center()
    f.Show()
    app.MainLoop()


if __name__ == "__main__":
    main()
mfg
Gerold
:-)