In unserem Podcast diskutiert Thomas Bahn über Nutzen, Anwendungen und Erfahrungen aus den Bereichen Chatbots und Künstliche Intelligenz. Mehr erfahren

de · en

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

von Bernd,
assono GmbH, Standort Hamburg,

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

Fachbeitrag HCL Notes HCL Notes Traveler JavaScript Java Linux

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

Sie haben Fragen?

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Gerne erstellen wir eine individuelle Demo für Sie.

assono GmbH

Standort Kiel (Zentrale)
assono GmbH
Lise-Meitner-Straße 1–7
24223 Schwentinental

Standort Hamburg
assono GmbH
Bornkampsweg 58
22761 Hamburg

Telefonnummern:
Zentrale: +49 4307 900 416
Vertrieb: +49 4307 900 402

E-Mail-Adressen:
kontakt@assono.de
bewerbung@assono.de