SnTT: Bilder per Agent herunterladen und skalieren auf Linux-Server

von Bernd, assono GmbH, Standort Hamburg, 22.06.2007

Bilder von einer Webcam herunterladen und skalieren mittels eines Lotus Notes Agents kann ja nicht so schwierig sein. Schließlich gibt es mit Java Image I/O ein entsprechendes Paket, dass alles notwendige mitbringt. Nach ein paar Versuchen funktioniert die Lösung auch in einem Backend-Agent. Zumindest tut sie das auf einem Domino Server, der unter Windows läuft.

Läuft der Server unter Linux gibt es eine hässliche Fehlermeldung:
java.lang.NoClassDefFoundError: sun/awt/X11GraphicsEnvironment

Nach ein wenig Recherche war die Ursache für das Problem gefunden. Java Image I/O verwendet Funktionen des Betriebssystems, um die Grafiken herunterzuladen und umzuwandeln. Wenn der Server unter Linux ohne graphische Oberfläche läuft, stehen diese Funktionen aber leider nicht zur Verfügung.

Die Lösung für dieses Problem heißt JIMI. Ursprünglich wurde JIMI entwickelt, um unter Java 1.1.x die Bearbeitung von Bildern zu ermöglichen. Sun stellt es kostenlos als Download zur Verfügung: http://java.sun.com/products/jimi/

Nach dem Download muss die Datei JimiProClasses.zip dem Agenten mittels "Edit Project" zugänglich gemacht werden.

Der Agent gliedert sich nun in drei Teile.

Zunächst wird mittles des java.net Pakets das Bild auf die lokale Festplatte heruntergeladen.
int pos = this.urlString.lastIndexOf("/");
String filename = this.urlString.substring(pos + 1);
URLConnection con = null;
URL url = new URL(urlString);
con = url.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestProperty("file-name", filename);
con.setRequestProperty("content-type", "binary/data");

InputStream in = con.getInputStream();

int count;
byte[] buffer = new byte[8192]; // or more ...
while ((count = in.read(buffer)) > 0)
out.write(buffer, 0, count);
out.close();
out = null;

Anschließend wird mit dem JPEGImageDecoder eine Image-Objekt erzeugt.
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(new FileInputStream(filename));
image = decoder.decodeAsBufferedImage();

Der letzte Schritt besteht darin, mittels JIMI AreaAverageScaleFilter und einem JimiWriter auf der Festplatte die neue Version zu erzeugen.
FilteredImageSource filteredImage = new FilteredImageSource (image.getSource (), new AreaAverageScaleFilter (thumbWidth, thumbHeight));
JimiWriter writer = Jimi.createJimiWriter(filePath);
writer.setSource(filteredImage);
JPGOptions options = new JPGOptions();
options.setQuality(75);
writer.setOptions(options);
writer.putImage(filePath);

Weil es doch immer einfacher ist, ein funktionierendes Beispiel zu sehen, habe ich eine kleine Demo-Datenbank erstellt. wink.gif
zip.gif JIMIDemo.zip

Bernd Hort

Bernd Hort

Diplom-Informatiker, Software-Entwickler & Speaker auf Fachkonferenzen

Bernd Hort ist Expert Digital Business Consultant bei assono. Seit mehr als 20 Jahren entwickelt er erfolgreich individuelle Software-Anwendungen für Unternehmen verschiedener Branchen. Insbesondere in den Bereichen HCL Notes und Domino (ehemals IBM) als auch bei aktuellen, unternehmensrelevanten Themen wie Web-Entwicklung und Web-Architektur, bei Angular-Anwendungen als auch bei progressiven Web-Apps kennt er die neusten Entwicklungen und weiß, wie diese eingesetzt werden können, um den größten Kundennutzen zu erzielen. Aufgrund seines Expertenwissens ist Bernd Hort regelmäßiger Sprecher auf nationalen und internationalen Fachkonferenzen.

Fachbeitrag Linux HCL Notes HCL Notes Traveler Java JavaScript

Sie haben Fragen zu diesem Artikel? Kontaktieren Sie uns gerne: blog@assono.de

Sie haben Interesse an diesem Thema?

Gerne bieten wir Ihnen eine individuelle Beratung oder einen Workshop an.

Kontaktieren Sie uns

Weitere interessante Artikel