TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
DU LERNST HIER... |
wie du eine Datenbank dafür verwenden kannst, digitalisierte Bilder in Tabellenfeldern abzuspeichern. So wie Text, kannst du auch die Pixel eines Bildes in Bytes codieren, beispielsweise den Rot-, Grün- und Blauanteil in drei Bytes R,G,B, die du als Zahlen 0..255 auffassen kannst. |
MUSTERBEISPIEL |
Du willst zu jeder Person einer Personendatenbank auch noch ihr Foto abspeichern. Wiederum gehst du von der Tabelle persons aus, so wie du sie bereits im Kapitel 3 verwendet hast, fügst aber ein zusätzliches Feld "image" hinzu. Die Personenbilder im Bildformat GIF, PNG oder JPG müssen sich im gleichen Verzeichnis wie das Programm befinden. Hast du gerade keine Bilder zur Verfügung, so kannst du ein kleine Bildsammlung mit 24 Cartoons von hier herunterladen und auspacken. Die Funktion getBytes(filename) liest die binären Daten aus der angegebenen Bilddatei und stellt sie als Bytebuffer zur Verfügung. Sie können genau gleich wie andere Felder bei insert() angegeben werden. from dbtable import * lia = getBytes("lia.png") luca = getBytes("luca.png") tim = getBytes("tim.png") jan = getBytes("jan.png") noah = getBytes("noah.png") nina = getBytes("nina.png") persons = DbTable('id', 'name', 'vorname', 'wohnort', 'geschlecht', 'jahrgang', 'image') persons.insert(1,'Huber','Lia','Bern','w', 2002, lia) persons.insert(2,'Meier','Luca','Basel','m', 2003, luca) persons.insert(3,'Frech','Tim','Bern','m', 2000, tim) persons.insert(4,'Bauer','Jan','Luzern','m', 2003, jan) persons.insert(5,'Zwahlen','Noah','Thun','m', 2002, noah) persons.insert(6,'Meier','Nina','Biel','w', 2001, nina) print(persons) persons.save('schule.db') Beim Ausschreiben der Tabelle mit print "siehst" du die Bilder allerdings nur als Bytewerte. Um sie als Bild anzuzeigen, benötigst du ein Grafikfenster (hier ein Turtlefenster) und durchläufst in einer for-Schleife die einzelnen Zeilen. from dbtable import * from gturtle import * makeTurtle() ht() pu() persons = DbTable() persons.restore('schule.db') x = -320 for record in persons: setPos(x, 0) drawImage(record.image) setPos(x, -100) label(record.vorname + " " + record.name, adjust = 'c') x += 130 Ergebnis:
|
MERKE DIR... |
Um Bilder in eine Tabelle einzufügen, musst du diese mit getBytes() als Bytebuffer einlesen und sie in insert() angeben. Nachher kannst du alle Tabellenoperationen wie üblich anwenden. |
ZUM SELBST LÖSEN |
|
Ein solches Tabellenfeld besitzt den Datentyp BLOB (Binary Large OBject) und kann in SQLite bis über 1 GB gross sein.
Du kannst auch einen absoluten Pfad angeben.