Bild in Datenbank speichern, auslesen und anzeigen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten