Einfache "Bildbearbeitung" mit Oracle Application Express
Erscheinungsmonat |
APEX-Version |
Datenbankversion |
Ausgust 2016 |
alle |
ab 11.2 |
Der Umgang mit Bilddateien ist
für die meisten Web-Anwendungen völlig normal. Zum Thema
Dateien in APEX hoch- und
wieder herunterladen bzw. darstellen gibt
es ja bereits eigene Community-Tipps.
Vielfach werden neben
diesem einfachen Up- und Download weitergehende Fähigkeiten
benötigt ...
- Größenänderung bzw. Skalierung
- Umwandeln in Graustufen
- Drehen, Spiegeln
- ...
Die
Oracle-Datenbank bietet diese und andere
Basis-Funktionalitäten zum Bearbeiten
von Bildern mit
MultiMedia direkt in der
Datenbank an. Eine praktische Anwendung ist die automatische
Erstellung von Thumbnails für Bilder. In
diesem Tipp erfahren Sie, wie Sie diese Funktionen für Ihre
eigenen Anwendungen nutzen können.
Erstellen
Sie zunächst eine Tabelle namens BILDER_TAB, welche die Bilder aufnehmen soll.
Diese sollte aber zwei BLOB-Spalten erhalten - eine nimmt das Originalbild
auf, die andere das kleinere Vorschaubild (den Thumbnail). Zusätzlich
enthält sie noch Spalten für die Höhe und Breite des Bildes in Pixeln.
Erstellen Sie dann eine Applikation mit einer Seite zum Hochladen von Bildern.
Da das verkleinerte Vorschaubild direkt beim Speichern des Bildes generiert werden
soll, kommen die APEX-Standardfunktionen nicht in Frage: Es wird eigener PL/SQL-Code
benötigt. Insofern erstellen Sie Region, Formularelement (Datei-Upload) und die
Schaltfläche zum Absenden am besten einzeln (Abbildungen 1 und 2). Achten Sie
darauf, das Element für den Datei-Upload so einzustellen, dass das Bild in APEX_APPLICATION_TEMP_FILES
und nicht in der Tabelle BILDER_TAB abgelegt wird.
Abbildung 1: Element zum Datei-Upload erstellen: Ablage in APEX_APPLICATION_TEMP_FILES
Abbildung 2: Fertige "Seite" zum Bild-Upload
Wenn Sie nun eine Datei auswählen
und die Schaltfläche Upload klicken, speichert
Application Express
das Bild automatisch in die Tabelle APEX_APPLICATION_TEMP_FILES.
Dort steht es als Datentyp BLOB
bereit. Sie benötigen daher nun einen PL/SQL-Prozeß,
welcher das Bild aus der Tabelle APEX_APPLICATION_TEMP_FILES
entnimmt und in Ihre
eigene Tabelle BILDER_TAB
speichert. Im gleichen Atemzug werden wir dann auch den Thumbnail erstellen.
Achten Sie im Code auf das Kommando ORDIMAGE.PROCESSCOPY -
damit wird der Thumbnail erstellt und in eine Variable vom Typ BLOB abgelegt. Probieren
Sie es nun aus und laden Sie schonmal ein paar Bilder hoch - am besten nehmen Sie größere,
hoch aufgelöste Bilder, damit sich die Thumbnail-Berechnung auch lohnt.
Erzeugen Sie als nächstes einen (klassischen) Bericht unterhalb der HTML-Region. Nehmen Sie
die folgende SQL-Abfrage als Berichtsquelle.
Der Bericht sollte vorerst wie in Abbildung 3 aussehen (Übrigens: Zur Darstellung
von Dateigrößen in Byte ist die Formatmaske FILESIZE hervorragend geeignet). Die Spalte
BILD_AKTION wird später noch gebraucht.
Abbildung 3: Bericht auf Tabelle BILDER_TAB
Man kann schon sehen, dass der Thumbnail mit 1,3KB signifikant kleiner ist als das Originalbild
mit ca. 1MB.
Der Vorteil von im Voraus berechneten Thumbnails wird sofort deutlich, wenn man sich
vorstellt, dass für eine Seite mit bspw. 50 Thumbnails alternativ die Originalbilder zum Browser
übertragen und dort kleingerechnet würden.
Nun geht es an die Darstellung des Thumbnails selbst. Hierzu können Sie sich
der APEX-Standardmittel bedienen. Navigieren Sie zu den Berichtsattributen , dort
zur Spalte VORSCHAU und dort zur Formatmaske. Hinterlegen Sie dort folgende Formatanweisung:
Übrigens: Wenn Sie Ihrem Bericht mit DBMS_LOB.GETLENGTH(BILD) noch eine Spalte hinzufügen
und diese mit der Formatmaske ...
... versehen, haben Sie direkt auch einen Download-Link für das Originalbild.
Starten Sie die Seite neu und betrachten Sie das Ergebnis:
Abbildung 4: Tabelle BILDER_TAB mit Thumbnails
Egal wie groß die von Ihnen hochgeladenen Bilder sind, der Bericht wird immer
ein Thumbnail mit maximal 100 Pixeln Kantenlänge anzeigen - das sind recht kleine
Dateigrößen, so dass der Bericht immer performant erstellt werden kann.
Als nächstes sollen die Spalten für Breite und Höhe des Bildes gefüllt werden; bislang
enthalten sie SQL NULL. Der Datentyp ORDIMAGE bietet auch hierfür Funktionen an: GETWIDTH
und GETHEIGHT. Gehen Sie also zum vorhin erzeugten PL/SQL-Prozess und tauschen Sie
das INSERT-Kommando in BILDER_TAB gegen das folgende aus.
Starten Sie die Seite nochmals neu und laden Sie wiederum ein Bild hoch (Höhe und
Breite werden natürlich nur für die ab jetzt hochgeladenen Bilder ermittelt). Sie
sehen, dass die Spalten nun gefüllt sind.
Abbildung 5: Die Berichtsspalten für Höhe und Breite sind nun gefüllt
Als nächstes geht es daran, noch andere Operationen auf den Bildern durchzuführen -
ein interessantes Kommando ist beispielsweise das Umwandeln in Graustufen. Damit man
solche Operationen aus dem Bericht heraus starten kann, muss dieser ein wenig geändert werden.
- Erzeugen Sie eine Tabelle BILD_AKTIONEN und fügen Sie eine Zeile wie folgt ein:
-
Ändern Sie das Berichts-SQL wie folgt um. Es wird eine Spalte FORM_ID als HTML HIDDEN-Feld hinzugefügt und die
Spalte BILD_OPERATION wird eine Auswahlliste:
- Stellen Sie das Attribut Escape Special Characters der Spalten FORM_ID und BILD_AKTION in den Spaltenattributen auf No um. Nehmen Sie für FORM_ID auch die Überschrift heraus (Abbildung 7).
Abbildung 6: Spalte FORM_ID auf Standardberichtsspalte setzen
Fügen Sie dann noch eine Schaltfläche zum Durchführen der Aktionen hinzu - nennen Sie
diese EXEC_BILD_AKTIONEN und geben Sie ihr das Label Bildaktionen durchführen. Der
Bericht sollte dann wie in Abbildung 7 aussehen ...
Abbildung 7: Im Bericht können nun Bildaktionen gewählt werden
Nun geht es an den PL/SQL-Prozess, der die konkret gewählten Bildaktionen
durchführt. Erzeugen Sie also einen neuen OnSubmit-Prozess vom Typ PL/SQL, nennen Sie
ihn Bildaktionen durchführen und hinterlegen Sie folgenden PL/SQL-Code (Achten Sie darauf, bei den Bedingungen einzustellen, dass der Prozess nur bei Klick auf die Schaltfläche EXEC_BILD_AKTIONEN ausgeführt wird).
Probieren Sie es nun aus - stellen Sie die Auswahlliste für eines der Bilder
auf Graustufen und klicken Sie die Schaltfläche. Kurze Zeit später sollte genau dieses
Bild umgestellt sein (Abbildung 8).
Abbildung 8: Ein Bild wurde in Graustufen umgewandelt
Das Hinzufügen weiterer Operationen ist nun ganz einfach. Füllen Sie einfach die
Tabelle BILD_AKTIONEN entsprechend. Interessant sind unter anderem diese Kommandos ...
- contentFormat=8BITGRAY: Umwandlung in Graustufen
- rotate [grad]: Dreht das Bild um [grad] Grad
- mirror: Spiegelt das Bild
- gamma [wert größer als 1]: hellt das Bild auf
- gamma [wert kleiner als 1]: dunkelt das Bild ab
Daraus könnte man folgende Operationen ableiten ...
Und schon stehen weitere Bildoperationen zur Verfügung (Abbildung 9).
Abbildung 9: Bildoperationen mit Application Express
Eine besondere Funktion ist das ab Oracle11g Release 2 verfügbare APPLYWATERMARK;
damit wird es möglich, ein "Wasserzeichen", also einen Text oder ein anderes Bild,
an einer bestimmten Position in das Bild hineinzusetzen - zum Abschluß sei diese
Variante erklärt. Zunächst brauchen Sie ein Texteingabefeld für das "Wasserzeichen".
Ändern Sie das Berichts-SQL also nochmals wie folgt um:
Navigieren Sie auch zu den Spaltenattributen der neuen Spalte WASSERZEICHEN_TEXT
und stellen Sie die Anzeige auf Standardberichtsspalte um. Fügen Sie danach eine
Operation für die Erstellung von Wasserzeichen in Ihre Tabelle BILD_AKTIONEN ein.
Das Erzeugen eines Wasserzeichens funktioniert technisch jedoch etwas anders als
die bisher verwendeten Operationen. Die PL/SQL Funktion ORDIMAGE.PROCESS kommt hier
nicht zum Einsatz - vielmehr wird eine eigene Funktion genutzt: APPLYWATERMARK. Also
muss der PL/SQL-Prozesscode nochmals erweitert werden ...
Nun können Sie es ausprobieren ... schaut man sich das Bild anschließend
in Originalgröße an, so kann man das Wasserzeichen ganz hervorragend erkennen (Abbildungen 10 und 11).
Abbildung 10: Bericht mit Möglichkeit zum Setzen eines Wasserzeichens
Abbildung 11: Gesetztes Wasserzeichen
Zusammenfassend lässt sich sagen, dass eine ganze Reihe an Bildoperationen
mit der Datenbank erledigt werden können - geht es beispielsweise um die
Bilder eines Produktkataloges, so können sicherlich alle nötigen Arbeiten
mit APEX direkt erledigt werden - der Einsatz zusätzlicher Software dürfte
sich in vielen Fällen erübrigen.
Wenn Sie mit Ihrer Bildbearbeitung noch einen Schritt weiter gehen möchten, schauen
Sie sich den (schon etwas älteren) Community Tipp Bilder manipulieren und bearbeiten: Mit Application Express an. Das dort vorgestellte PL/SQL Paket IMAGE_GENERATOR kann
noch wesentlich mehr tun, als Texte in die Bilder zu schreiben.
Zurück zur Community-Seite
|