Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: εισαγωγή εικόνας από βάση δεδομένων

εισαγωγή εικόνας από βάση δεδομένων 6 Μήνες 2 Εβδομάδες πριν #5097

  • cps
  • Το Άβαταρ του/της cps
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 53
Καλησπέρα, Καλό μήνα και καλή Μεγάλη Εβδομάδα.
Έχω φτιάξει μία βάση δεδομένων με sql, έχω δημιουργήσει τρεις στείλες μία στήλη με όνομα id, μία στήλη με όνομα Name, (ιδιότητα text), μία στήλη με όνομα image (ιδιότητα blob). Με ποιο τρόπο μπορώ να εμφανίζω την εικόνα σε μία φόρμα φτιαγμένη με tkinter;
Ευχαριστώ εκ των προτέρων
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

εισαγωγή εικόνας από βάση δεδομένων 6 Μήνες 2 Εβδομάδες πριν #5100

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 405
  • Ληφθείσες Ευχαριστίες 87
Υπάρχουν διάφοροι τρόποι, με μικρή διαφορά από μια βάση δεδομένων σε μια άλλη. (Δεν γράφεις τι βάση δεδομένων χρησιμοποιείς.)

Η διαδικασία είναι η εξής:
  • Αποθηκεύεις την εικόνα από τη βάση στο σκληρό δίσκο.
  • Διαβάζεις την εικόνα από τον σκληρό δίσκο και την εμφανίζεις.

Εδώ υπάρχει ένας οδηγός, για το πως θα διαβάσεις την εικόνα από τον σκληρό και να την εμφανίσεις.
Αν τώρα θέλεις να χρησιμοποιήσεις εικόνες διαφορετικές από τη μορφή gif που υποστηρίζει η βιβλιοθήκη tkinter, πρέπει να χρησιμοποιήσεις την βιβλιοθήκη Pillow.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

εισαγωγή εικόνας από βάση δεδομένων 6 Μήνες 2 Εβδομάδες πριν #5103

  • cps
  • Το Άβαταρ του/της cps
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 53
Εγώ βρήκα αυτό
Reading images
 
In the previous example, we have inserted an image into the database table. Now we are going to read the image back from the table.
 
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import MySQLdb as mdb 
 
def writeImage(data):
 
    fout = open('woman2.jpg', 'wb')
 
    with fout:
 
        fout.write(data)
 
con = mdb.connect('localhost', 'testuser', 'test623', 'testdb')
 
with con:
 
    cur = con.cursor()
 
    cur.execute("SELECT Data FROM Images WHERE Id=1")
    data = cur.fetchone()[0]
    writeImage(data)    
 
We read one image from the Images table.
 
cur.execute("SELECT Data FROM Images WHERE Id=1")
 
We select one record from the table.
 
fout = open('woman2.jpg', 'wb')
 
We open a writable binary file.
 
fout.write(data)
 
We write the data to the disk.
 
Now we should have an image called woman2.jpg in our current directory. We can check if it is the same image that we have inserted into the table. 
Βέβαια αυτός μιλάει για mysql, χωρίς να ξέρω ποια είναι η διαφορά, εγώ τη δική μου βάση την έφτιαξα με την εφαρμογή DB Browser for SQLite (DB Browser for SQLite is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite), περισσότερες πληροφορίες.
Εμένα ο φάκελος που μου αποθηκεύει στο δίσκο είναι άδειος, δεν έχει τίποτα.

Επίσης θέλω να ρωτήσω υπάρχει τρόπος να δώσεις το path της εικόνας στη βάση και όταν καλείς τα στοιχεία να φέρνει την εικόνα από το δίσκο. Χωρίς να αποθηκεύεται η εικόνα στη βάση δεδομένων.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

εισαγωγή εικόνας από βάση δεδομένων 6 Μήνες 2 Εβδομάδες πριν #5104

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 405
  • Ληφθείσες Ευχαριστίες 87
Σου παραθέτω δυο τμήματα κώδικα (για Sqlite3).


import sqlite3
import os
 
 
def create_or_open_db(db_file):
    db_is_new = not os.path.exists(db_file)
    conn = sqlite3.connect(db_file)
    if db_is_new:
        print('Creating schema')
        sql = "CREATE TABLE imagestest (id INTEGER PRIMARY KEY, \
        imgcontent BLOB, \
        name TEXT);"
        conn.execute(sql) # shortcut for conn.cursor().execute(sql)
    else:
        print('Schema exists\n')
    return conn
 
 
def insert_picture(conn, picture_file):
    with open(picture_file, 'rb') as input_file:
        ablob = input_file.read()
        base = os.path.basename(picture_file)
 
        sql = "INSERT INTO imagestest(imgcontent, name) VALUES(?, ?)"
        conn.execute(sql,[sqlite3.Binary(ablob), base]) 
        conn.commit()
 
 
def extract_picture(cursor):
    sql = "SELECT imgcontent, name from imagestest"
    cursor.execute(sql)
    ablob, filename = cursor.fetchone()
    with open(filename, 'wb') as output_file:
        output_file.write(ablob)
    return filename
 
if __name__ == '__main__':
    conn = sqlite3.connect("images.db")
    cur = conn.cursor()
    extract_picture(cur)

και

import sqlite3
 
conn = sqlite3.connect("images.db")
cur = conn.cursor()
qry = "CREATE TABLE imagestest (id INTEGER PRIMARY KEY, \
        imgcontent BLOB, \
        name TEXT);"
cur.execute(qry)
conn.commit()
 
img = sqlite3.Binary(open('portrait.jpg', 'rb').read())
nm = 'portrait.jpg'
 
qry1 = "INSERT INTO imagestest(imgcontent, name) VALUES(?, ?)"
cur.execute(qry1, (img, nm))
conn.commit()
cur.close()
conn.close()

Πρόσεξε το σημείο sqlite3.Binary.
Προσάρμοσε τα παραδείγματα στις ανάγκες σου.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": cps

εισαγωγή εικόνας από βάση δεδομένων 6 Μήνες 2 Εβδομάδες πριν #5105

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 405
  • Ληφθείσες Ευχαριστίες 87
Επίσης θέλω να ρωτήσω υπάρχει τρόπος να δώσεις το path της εικόνας στη βάση και όταν καλείς τα στοιχεία να φέρνει την εικόνα από το δίσκο. Χωρίς να αποθηκεύεται η εικόνα στη βάση δεδομένων

Και βέβαια μπορείς. Το path για την εικόνα αποθηκεύεται ως text.
Προτείνω, μόνο να χρησιμοποιήσεις ένα πεδίο για τη διαδρομή πχ. '/home/user/images'
και ένα πεδίο για το όνομα πχ. 'image.png'.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": cps

εισαγωγή εικόνας από βάση δεδομένων 6 Μήνες 1 Εβδομάδα πριν #5111

  • cps
  • Το Άβαταρ του/της cps
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 53
Ευχαριστώ πολύ για τη βοήθεια.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.661 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου