Digitale Fotografien im Griff

Zusammenfassung

Lernen Sie einige Techniken kennen, mit denen Sie ihre Sammlung digitaler Fotografien in den Griff bekommen.

Techniken

VBA, Formulare, Berichte

Voraussetzungen

Access 2000 oder höher

Beispieldateien

Bilddatenbank.mdb

André Minhorst, Duisburg

Kennen Sie das auch Die digitalen Fotos werden mal hier und mal da auf die Festplatte gebannt, und hierhin und dorthin wird noch eine Sicherung gespeichert. Die übersicht kann da sehr schnell leiden. Oder Sie möchten, bevor es weitere 1000 neue Fotos auf die Festplatte verschlägt, endlich einmal ein paar Abzüge machen lassen. Das Zusammenstellen und der Transport der Bilder zum Fotostudio bringt dann weitere Hindernisse. Mit der Lösung in diesem Beitrag behalten Sie den überblick – und mehr …

Wenn man nicht von Anfang an Ordnung hält, bricht schnell Chaos aus. Das gilt für den Schreibtisch wie für die Festplatte – und dort vor allem für zu archivierende Daten. Zu diesen gehören ganz sicher Digitalfotos – man schießt den Speicher der Kamera voll, leert den Inhalt auf der Festplatte aus, macht neue Schnappschüsse und so fort.

Eine Digitalkamera lädt dazu ein, ruhig mal einen Klick zu viel zu riskieren – kostet ja schließlich nichts. Das heißt – fast nichts, denn ein wenig Speicherplatz geht schon verloren, wenn man die Fehlschüsse nicht gleich von der Platte putzt oder gar nicht erst dort speichert.

Knipsen, bis die Platte platzt

Aber seien Sie mal ehrlich: Solange der Speicherplatz auf der Festplatte nicht dem Ende zugeht, besteht scheinbar kein Grund zum Aussortieren der überflüssigen Bilder. “Das mache ich, sobald ich die besten Schnappschüsse dieser Rutsche entwickeln lasse!” – so heißt es sicher bei vielen Hobby-Fotografen.

Bis man dann wenig später feststellt, dass mal wieder einige hundert neue Fotos zusammengekommen sind, ohne dass man auch nur ein einziges hat entwickeln lassen.

Und das ist auch schon das nächste Problem: Will man die Bilder online entwickeln lassen, stellt man schnell fest, dass DSL und Konsorten zwar einen passablen Download bieten, beim Upload aber nur ein wesentlich geringerer Datendurchsatz möglich ist. Und bei Fotos á zwei Megabyte macht das nach ein paar Bildern keinen Spaß mehr.

Also beschließen Sie, auch mal den mittlerweile zur Standardausrüstung gehörenden CD- oder DVD-Brenner zu verwenden und einen Rutsch Bilder zum nächsten Discounter oder auch zum Fotofachgeschäft zu bringen.

Also nehmen wir mal drei Abzüge von diesem hier, zwei von jenem, … – halt: Wie kann ich von vornherein festlegen, wie viele Abzüge ich von jedem Bild haben möchte Ach, das soll ich dann im Geschäft machen – mit dem quengelnden Kind auf dem Arm und fünfzehn anderen Kunden im Rücken, die gerne mal ein wenig indiskret den einen oder anderen Blick erhaschen möchten Nein. Dann doch lieber direkt die Bilder mehrfach auf CD brennen, ab in den Fotoladen, und “einmal von jedem eins, 10 x 15, matt bitte!”.

Wenn Sie bei dieser Vorgehensweise noch den überblick bewahren: Herzlichen Glückwunsch. Falls nicht oder falls vielleicht auch mal der weniger bedarfte Partner oder die Kinder Fotos zusammenstellen sollen, ohne dass anschließend das Backup zum Wiederherstellen der Daten ran muss, finden Sie im vorliegenden Beitrag die Werkzeuge, um Ihre Bilder im Griff zu haben. Diese müssen Sie dann nur noch zusammensetzen – oder Sie warten bis zur nächsten Ausgabe von Access im Unternehmen.

Access & Co. helfen weiter

In den folgenden Kapiteln lernen Sie einige Techniken kennen, mit denen Sie Ihre digitale Fotosammlung verwalten:

  • Routine zum Einlesen aller .jpg-Dateien eines Verzeichnisses und der enthaltenen Unterverzeichnisse
  • Klasse zum Ermitteln von Bilddaten – unter anderem Erstellungsdatum, Abmessungen, Kameratyp und weitere Daten zu den Kameraeinstellungen zum Zeitpunkt der Aufnahme
  • Tool zum Manipulieren von digitalen Bildern: Mit ImageMagick können Sie von VBA-Routinen aus änderungen an digitalen Fotos vornehmen – etwa, um Mini-Versionen der Bilder zu erstellen, die in der Datenbank gespeichert werden können.
  • Technik zum Einlesen von Bildern in OLE-Objekt-Felder einer Tabelle
  • Technik zum Anzeigen von Bildern aus OLE-Feldern, ohne diese zwischendurch auf der Festplatte speichern zu müssen

Im vorliegenden Beitrag lernen Sie die grundlegenden Techniken kennen, die Sie in einer der folgenden Ausgaben von Access im Unternehmen zu einer komfortablen Bildverwaltung zusammensetzen.

Bevor Sie mit dem Vorbereiten einer Ladung von Bildern zum Entwickeln beginnen können, müssen Sie zunächst einmal die Festplatte nach den vorhandenen Bildern durchkämmen. Auf diese Weise können Sie vielleicht direkt feststellen, wie viele Sicherheitskopien des einen oder anderen Bildes sich dort mittlerweile befinden.

JPEGs nach vorne, bitte!

Zum Erfassen der Bilder müssen Sie nur die gewünschten Verzeichnisse durchlaufen und alle enthaltenen Dateien finden, die mit .jpg enden.

Die erste Version dieser Routine, die Sie später sukzessive ausbauen werden, arbeitet mit einer Tabelle namens tblBilder, die neben dem Primärschlüssel lediglich den Dateinamen und den Dateipfad der Bilddateien speichert. Diese Informationen sollen separat in zwei Textfeldern mit je 255 Zeichen verwaltet werden.

Der Aufruf der Routine aus Quellcode 1 lautet etwa folgendermaßen:

BilderEinlesenBasis "<Verzeichnis>"

Eines der größten Probleme im Zusammenhang mit Fotos – egal ob im herkömmlichen oder digitalen Format – ist oft die fehlende Zeitangabe. Selbst das Speicherdatum der entsprechenden Datei ist nicht unbedingt zuverlässig: Kopieren Sie einmal eine Datei und schauen Sie sich das Erstellungsdatum der neuen Datei an – es ist das aktuelle Datum. Durch einfaches Kopieren der Dateien verlieren Sie also wichtige Informationen. Zwar liefert das änderungsdatum ebenfalls das eigentliche Erstellungsdatum (vorausgesetzt, Sie haben das Foto noch nicht bearbeitet), aber Otto Normalverbraucher weiß dies unter Umständen nicht.

Quellcode 1: Alle .jpg-Dateien in einer Tabelle speichern

Public Sub BilderEinlesenBasis(strVerzeichnis As String)
    Dim i As Integer
    Dim intOrdner As Integer
    Dim strDateiname As String
    Dim strOrdner() As String
    Dim db As Database
    Dim rstBilder As Recordset
    
    Set db = CurrentDb
    Set rstBilder = db.OpenRecordset("tblBilder")
    strDateiname = Dir(strVerzeichnis)
  
    Do While strDateiname <> ""
        If InStrRev(strDateiname, ".jpg") > 0 Then
            rstBilder.AddNew
            rstBilder!Dateiname = strDateiname
            rstBilder!Dateipfad = strVerzeichnis
            rstBilder.Update
        End If
        strDateiname = Dir
    Loop
    strDateiname = Dir(strVerzeichnis, vbDirectory)
    
    Do While strDateiname <> ""
        If strDateiname <> "." And strDateiname <> ".." Then
            If GetAttr(strVerzeichnis & strDateiname) And vbDirectory Then
                intOrdner = intOrdner + 1
                ReDim Preserve strOrdner(intOrdner)
                strOrdner(intOrdner) = strVerzeichnis & strDateiname
            End If
        End If
        strDateiname = Dir
        DoEvents
    Loop
    For i = 1 To intOrdner
        BilderEinlesen strOrdner(i) & "\"
    Next i
    rstBilder.Close
    Set rstBilder = Nothing
    Set db = Nothing
End Sub

Eine Alternativlösung ist das Integrieren des Erstellungsdatums am rechten unteren Rand des Bildes, aber das stört doch sehr, wenn man mal ein Bild in einen Bilderrahmen stecken möchte.

Ein Bild ist mehr als ein Bild

Zum Glück denken die Kamerahersteller weiter: Sie speichern in den Bilddateien ausführliche Informationen über das Bild – und dazu gehören nicht nur das Datum, an dem das Bild aufgenommen wurde, sondern noch viele Informationen mehr.

Diese Informationen stehen an einer festen Stelle in den Bilddateien, die sich bei genauerem Hinsehen oft als EXIF-Dateien (Exchangeable Image File Format) entpuppen, die prinzipiell als JPEG-Dateien mit zusätzlichen Informationen betrachtet werden können. Die Spezifikation solcher Dateien finden Sie unter der Internetadresse http://www.exif.org/specifications.html.

Quellcode 2: Routine zum Ausgeben einiger Informationen einer Bilddatei

Public Sub BilddatenAusgeben(strBildname As String)
    Dim objExifReader As ExifReader
    Set objExifReader = New ExifReader
    With objExifReader
        .Load strBildname
        Debug.Print .Tag(DateTimeOriginal)
        Debug.Print .Tag(ExifImageHeight)
        Debug.Print .Tag(ExifImageWidth)
    End With
    Set objExifReader = Nothing
End Sub

Bild 1: Auswählen der verschiedenen Eigenschaften einer Bilddatei

Wie kommen Sie aber nun an die in der Bilddatei gespeicherten Informationen heran Zum Glück muss man hier nicht das Rad neu erfinden, sondern kann auf bestehende Werkzeuge zurückgreifen. In diesem Fall handelt es sich um eine VB-Klasse, die der Public Domain-Lizenz unterliegt und unter diesem Link zu finden ist: http://sourceforge.net/projects/exifclass

Diese Klasse binden Sie in das VBA-Projekt einer Access-Datenbank ein, indem Sie in der VBA-Entwicklungsumgebung den Menüeintrag Datei/Datei importieren… ausführen und die einzufügende Datei auswählen – in diesem Fall die Klasse ExifReader.cls.

Auslesen von EXIF-Daten

Um die Klasse für das Auslesen von Bildinformationen zu verwenden, erstellen Sie am einfachsten eine kleine Routine wie in Quellcode 2. Die Routine gibt die Höhe und die Breite (normalerweise in Pixel, prüfen Sie dies vorher) sowie das Erstellungsdatum des Bildes aus.

Es gibt noch eine Menge weiterer Informationen wie den Typ der Kamera, mit der das Foto erstellt wurde, und vor allem über die beim Fotografieren verwendeten Einstellungen.

Diese können Sie leicht über die entsprechenden Parameter der Tag-Eigenschaft der Klasse auslesen – IntelliSense liefert gute Dienste beim Auswählen der richtigen Eigenschaft (siehe Bild 1).

Die von der Routine BilddatenAusgeben erzeugte Ausgabe enthält nicht zufällig genau diese Informationen: Erstens ist für das Speichern von Bilddaten das Erstellungsdatum sehr wichtig und die Größe der Bilder benötigen Sie, wenn es weiter unten darum geht, Miniaturen der Bilder zum Speichern in der Datenbank zu erstellen.

Erstens lassen sich auf diese Weise die Bilder so verkleinern, dass diese alle in ein gleiches Viereck von beispielsweise 100 Pixel Kantenlänge passen, und zweitens erhalten Sie so die Proportionen der Bilder.

Um Informationen wie Erstellungsdatum, Höhe und Breite eines Bildes ebenfalls in der Datenbank zu speichern, fügen Sie der Routine aus Quellcode 1 einige Zeilen hinzu, löschen gegebenenfalls bereits angelegte Bilddaten und starten die Routine erneut.

Die Tabelle zum Speichern der Bilddaten erweitern Sie wie in Bild 2 – damit erstellen Sie auch direkt ein Feld zum Speichern der Thumbnails.

Bild 2: Entwurfsansicht der Tabelle tblBilder

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar