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

von Bernd Hort,
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 IBM Notes IBM Notes Traveler Tipp JavaScript Java Linux
Sie wollen mehr über assono erfahren? Zur Startseite

Weitere interessante Artikel

Sie haben Fragen? Wir sind für Sie da.

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Sie können uns auf verschiedene Weisen für eine unverbindliche Erstberatung erreichen:

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 407
Techn. Hotline: +49 4307 900 403
Vertrieb: +49 4307 900 402

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