Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2003  »  12  »  Bilder-Zauberer  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

Vielfältige Manipulationsmöglichkeiten

Die Anwendung der Weichzeichnung zeigt das Listing 3. Das Wichtige passiert in den Zeilen 60 bis 62. Zuerst wird ein verändertes »ImageMagick«-Objekt erzeugt, dann der neue Dateiname gesetzt, zuletzt das Bild geschrieben. Das Ergebnis zeigt Abbildung 3 (einige Biere haben dieselbe Wirkung. ;-)

finally{}

Die kompletten Listings zusammen mit einer Reihe weiterer kleiner Beispiele sind wie üblich auf dem Listing-Server des Linux-Magazins verfügbar. Mit wenig Aufwand ließe sich mit Java-Mitteln auch ein kleines GUI entwickeln - um endlich das ultimative Bildbearbeitungstool zu schaffen. Alternativ dazu bietet es sich aber an, die sehr gute Titelstrecke zum Thema Bildbearbeitung im unlängst erschienenen "LinuxUser"[5] zu lesen - hier findet sich für jeden Geschmack etwas.

JMagick ist sicher nicht dafür geeignet, die schon sehr guten Kommandozeilenprogramme von Image Magick oder vorhandene GUI-Lösungen zu ersetzen. Aber immer dort, wo es schon Java-basierte automatisierte Abläufe gibt (etwa auf Web-Applikationsservern), ist JMagick eine gute Alternative zur Bildbearbeitung mit nativen Java-Mitteln, etwa dem Image I/O Framework oder den Java2D-APIs. (uwo)


Abbildung 2 und 3: Pinguin auf dem Weg zum Oktoberfest, angezeigt mit JMagick. Pinguin auf dem Weg vom Oktoberfest (rechts), der verschwommene Eindruck kommt nicht vom Bier, sondern vom Filter in Listing 3.



Abbildung 2 und 3: Pinguin auf dem Weg zum Oktoberfest, angezeigt mit JMagick. Pinguin auf dem Weg vom Oktoberfest (rechts), der verschwommene Eindruck kommt nicht vom Bier, sondern vom Filter in Listing 3.

Listing 1: »Identify.java«
23: import magick.*;
24: import java.awt.*;
25:
34: public class Identify {
35:
45:   public static void main(String[] args) {
46:     if (args.length < 1 )
47:       usage();
49:     try {
50:       for (int i=0; i<args.length; ++i) {
51:
52:         ImageInfo info = new ImageInfo(args[i]);
53:         MagickImage image = new MagickImage(info);
54:
55:         System.out.println("Filename: " + image.getFileName());
56:         System.out.println("  Type: " + image.getMagick());
57:         Dimension dim = image.getDimension();
58:         System.out.println("  Width: " + dim.getWidth());
59:         System.out.println("  Height: " + dim.getHeight());
60:         System.out.println("  Resolution units: " + image.getUnits());
61:         System.out.println("  X resolution: " + image.getXResolution());
62:         System.out.println("  Y resolution: " + image.getYResolution());
63:         System.out.println("  Size blob: " + image.sizeBlob());
64:         System.out.println("  Colors: " + image.getNumberColors());
65:         System.out.println("  Depth: " + image.getDepth());
66:         System.out.println("  Colorspace: " + image.getColorspace());
67:         try {
68:           image.getColormap();
69:           System.out.println("  Colors in colormap: " + image.getColors());
70:         } catch (MagickException e) {
71:         }
72:       }
73:     } catch (MagickException ex) {
74:       System.err.println("MagickException: " + ex);
75:     }
76:   }
77: }
Listing 2: »Display.java«
023: import magick.*;
024: import magick.util.*;
025: import java.awt.*;
026: import java.awt.event.*;
027:
036: public class Display extends Frame {
037:
038:   MagickImage iImage;
039:   MagickViewer iViewer;
040:
048:   //////////////////////////////////////
049:
050:   public Display() {
051:     setResizable(true);
052:     addWindowListener(new WindowAdapter() {
053:       public void windowClosing(WindowEvent event) {
054:         System.exit(0);
055:       }
056:     });
057:     iViewer = new MagickViewer();
058:     add(iViewer, "Center");
059:   }
060:
061:   //////////////////////////////////////
062:
063:   public Dimension getPreferredSize() {
064:     return getMinimumSize();
065:   }
066:
067:   //////////////////////////////////////
068:
069:   public Dimension getMinimumSize() {
070:     try {
071:       if (iImage == null)
072:         return new Dimension(300, 200);
073:       else
074:         return iImage.getDimension();
075:     } catch (MagickException e) {
076:       return new Dimension(300, 200);
077:     }
078:   }
079:
080:   //////////////////////////////////////
081:
082:   public void setImage(MagickImage image) {
083:     iImage = image;
084:     iViewer.setImage(image);
085:   }
086:
087:   //////////////////////////////////////
088:
089:   public static void main(String[] args) {
090:     if (args.length != 1)
091:       usage();
092:
093:     try {
094:       ImageInfo   info  = new ImageInfo(args[0]);
095:       MagickImage image = new MagickImage(info);
096:       Display     d     = new Display();
097:       d.setImage(image);
098:       d.setTitle(image.getFileName());
099:       d.pack();
100:       d.show();
101:     } catch (MagickException ex) {
102:       System.err.println("MagickException: " + ex);
103:     }
104:   }
105: }
Listing 3: »Blur.java«
23: import magick.*;
24: import java.awt.*;
25:
34: public class Blur {
35:
45:   public static void main(String[] args) {
46:     if (args.length < 1)
47:       usage();
49:     try {
50:       for (int i=0; i<args.length; ++i) {
51:         String filename = args[i];
52:         ImageInfo info = new ImageInfo(filename);
53:         MagickImage image = new MagickImage(info);
54:
55:         int ext = filename.lastIndexOf(".",filename.length());
56:         if (ext == -1)
57:           ext = filename.length();
58:         filename = filename.substring(0,ext)+"_blur"+
59:                             filename.substring(ext);
60:         MagickImage bluredImage = image.blurImage(0.0,4.0);
61:         bluredImage.setFileName(filename);
62:         bluredImage.writeImage(info);
63:       }
64:     } catch (MagickException ex) {
65:       System.err.println("MagickException: " + ex);
66:     }
67:   }
69: }
Infos

[1] Homepage von Image Magick: [http://www.imagemagick.com]

[2] Image-Magick-C-API: [http://www.imagemagick.com/www/api.html]

[3] Homepage von JMagick: [http://www.yeo.nu/jmagick]

[4] Download von Image Magick und JMagick: [ftp://ftp.imagemagick.org/pub/ImageMagick]

[5] Professionelle Bildbearbeitung: Linux User 10/03, ab Seite 24

[6] Hiking Tux: [www.linuxbierwanderung.org]

[7] Coffee-Shop, "Java2D - Nicht nur für Bunte Bilder": Linux-Magazin 03/00, S. 154 (auch online verfügbar)

Der Autor

Bernhard Bablok arbeitet bei der Allianz Versicherungs AG im Bereich Data-Warehouse-Systeme. Wenn er nicht Musik hört, mit dem Radl oder zu Fuß unterwegs ist, beschäftigt er sich mit Themen rund um Objektorientierung. Er ist unter [mailto:coffee-shop@bablokb.de] zu erreichen.

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Ins Gesicht geblickt Gesichtserkennungs-SDKs OpenCV, Verilook und FaceVACS
Spreu vom Weizen Mobile Linux-Plattformen
Statt Mann und Maus Evolution und Revolution bei der grafischen Benutzerführung
Bildkorrekturen Bilder mit Java anzeigen und verarbeiten
Step by Step Objective-C und Gnustep
PDF nach Maß PDF-Dateien unter Linux konvertieren und bearbeiten
Whitepaper
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
The Role of Open Source in Data Integration

Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.

Download PDF (Registrierung erforderlich)
Kommentare (0)