Das nachfolgenden Packages ist frei verfügbar, solange es nicht kommerziell verwendet wird! Falls es so wie veröffentlicht, in Teilen oder abgewandelt zum Einsatz kommt, würde ich mich sehr über eine kurze E-Mail freuen.
Das Package enthält einen Dialog der den Export von Image-Objekt in die folgenden Formate ermöglicht :
GIF
PNG
JPG
Der Dialog enthält eine Auswahlmöglichkeit für das gewünschte Grafik-Format sowie ein Preview des übergebenen Image-Object. Bei Auswahl des JPG-Formats wird ein Slider aktiviert, mit dem die Kompressionsqualität angegeben werden kann (in Prozent). Darüber hinaus kann das Image-Object vor dem Export noch über eine Prozent-Angabe (oder im Preview mit der Mouse) in der Größe verändert werden.
Nach betätigen des Export-Buttons wird über ein File-Auswahldialog das Export-File bestimmt und das Image entsprechend der Auswahl exportiert.
Darüberhinaus wird in dem Package Grafik.GIFEncoder eine Klassenbibliothek für den GIF-Export bereitgestellt.
Beschreibung:
Der Dialog CExportGrafikDialog:
Export PNG:
Das Java-Package javax.imageio ermöglicht den einfachen Export von Image-Objekten:
Um mit JPEG-Bildern arbeiten zu können, wird ein Decoder benötigt. Dazu liefert die Methode JPEGCodec.createJPEGEncoder() ein JPEGImageEncoder-Objekt. JPEGImageEncoder selbst ist eine Schnittstelle, die JPEG-Dateien liest oder im Fall von JPEG ImageDecoder schreibt. Dazu verwendet die Klasse intern einen Datenpuffer, der vom Typ BufferedImage sein muss. BufferedImage ist eine Erweiterung der Image-Klasse. Transparenz ist für die Bilder nicht erlaubt. Mit einem konkreten Objekt können dann die Image-Daten geschrieben werden. Dafür wird nur ein beliebiges OutputStream-Objekt benötig.
JPEG-Bilder sind im Gegensatz zu GIF-Bildern verlustkomprimiert. Diese Verluste lassen sich jedoch klein halten. Über eine diskrete Kosinustransformation werden 8 x 8 große Pixelblöcke vereinfacht. Die Komprimierung nutzt die Unfähigkeit des Auges aus, Farbunterschiede so stark wahrzunehmen wie Helligkeitsunterschiede. So können Punkte, die eine ähnliche Helligkeit, aber eine andere Farbe besitzen, zu einem Wert werden. Bei einer hohen Kompression treten so genannte Artefakte (engl. degradation) auf, die unschön wirken. Bei einer sehr hohen Kompression ist das Bild sehr klein (aber auch hässlich).
Um die Qualität des Bilds einzustellen, wird eine Schnittstelle JPEGEncodeParam eingeführt. Das Encoder-Objekt bietet die Methode getDefaultJPEGEncodeParam() an, mit der wir an die Standardparameter kommen. Das Einstellen der Qualität geht über die Methode setQuality(qualiy, true).
Der Qualitätsfaktor ist ein Float und kann sich zwischen 0 und 1 bewegen. 1 bedeutet im Prinzip keine Kompression und somit höchste Qualität. Ein Wert um 0,75 ist ein hoher Wert für Qualitätsbilder, der Wert 0,5 für mittlere Bilder und 0,25 für stärkere Artefakte und hohe Kompression.
Export GIF:
Der GIF-Export wird von Java aus lizenzrechtlichen Gründen nicht unterstützt! Jedoch findet sich unter unter http://www.gurge.com/amd/old/java/GIFEncoder/index.html ein von Adam Doppelt geschriebener GIF-Encoder. Dieser wird an dieser Stelle im Package Grafik.GIFEncoder in leicht modifizierter Form verwendet:
Der Dialog CExportGrafikDialog wird mittels des folgenden Konstruktors initalisiert und gestartet:
public CExportGrafikDialog(Frame owner, String Titel, Image image)
Der GIF-Encoder:
Der GIF-Encoder besitzt zwei Konstruktoren, wobei entweder ein geladenes Image-Objekt gesichert werden kann oder drei Felder mit den RGB-Werten:
public CGIFEncoder(Image Img)
public CGIFEncoder(byte R[][], byte G[][], byte B[][])
Über die Write-Funktion der Klasse wird die Datei dann in einen Ausgabestrom geschrieben. Dieser sollte gepuffert sein, da die Kodierung ohnehin schon lange genug dauert.
public void Write(OutputStream output)
Beispiel:
Ein Beispiel für den GIF-Encioder findet sich im Abschnitt Beschreibung/Export GIF. Der Aufruf und Nutzung des Export-Dialog ist simpel: