Auflösung (dpi) von TIFF und PNG Bildern auslesen

d3n1s

Mitglied
Hallo zusammen,
ich möchte von Bildern die Auflösung in dpi auslesen. Für ein JPEG Bild ist mir das bereits gelungen (siehe Code). GIF Bilder haben immer automatisch 72 dpi. Übrig bleiben jetzt noch TIFF und PNG. Hat jemand eine Idee?


Hier der Code, um JPEG Bilder auszulesen:
Java:
File f = new File("C:/Bilder/test.jpg");
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(new FileInputStream(f));
decoder.decodeAsBufferedImage();
JPEGDecodeParam param = decoder.getJPEGDecodeParam();
int xDensity = param.getXDensity();
int yDensity = param.getYDensity();
if (xDensity == yDensity) {
    int resolution = xDensity;
}
 

d3n1s

Mitglied
weil das ein neues problem ist und nichts mehr mit der dateigröße zu tun hat. man hätte es auch in dem anderen thread schreiben können, aber jetzt ist es schon so.
 

nrg

Top Contributor
ja aber da schreibt doch jemand:

Maxideon [url=http://forums.sun.com/thread.jspa?threadID=5413087]Java 2D - How to read DPI from an Image[/url] hat gesagt.:
The ImageReader class has the following method.

ImageReader#getImageMetadata(int index)


This will return an IIOMetadata object. This object has the following method.

IIOMetadata#getAsTree(String formatName)


This method will return the root node of all image's metadata. You then obtain the dpi information by searching through the tree.

So here come's the complication: each image type has there own metadata format (their own tree structure):
GIF,
JPEG,
PNG,
BMP,
TIFF

So for example, the dpi node for the JPEG metadata is called "XDensity" and "YDensity", while for PNG its "pixelsPerUnitXAxis" and "pixelsPerUnitYAxis", and for BMP its "X" and "Y". I don't think GIF has dpi information, while TIFF is a slightly more complicated matter.

But all hope is not lost. Instead of passing the native metadata format name to

IIOMeatadat#getAsTree(String formatName)


You can pass the standard (plug-in neutral) format. Fortunately, all ImageReaders made by Sun support the standard meatadata format. So you can search for the dpi information in an image-neutral fashion. I believe in the standard format the dpi information is contained in the "HorizontalPixelSize" and "VerticalPixelSize" nodes.
 
S

Spacerat

Gast
Ich bin mir nicht Sicher, aber meines Wissens sind diese DPI Daten ohnehin immer nur Metadaten. Das ist in soweit ja auch kein Wunder, weil sie wirklich gar nichts mit der Speicherart eines Bildes (von wegen der Fläche in Pixeln) zu tun haben. 72dpi heisst nun mal, dass eine 1800 Pixel breite Grafik 56,44cm breit ist.
Das es beim Gif-Format diese Infos nicht geben kann halte ich persönlich für ein Gerücht, denn immerhin lässt sich soetwas ja auch in ein oder zwei Kommentaren unterbringen. Würde beim Gif aber wenig Sinn machen, da man ab Gif89a dessen Canvas-Grösse per AspectRatio des Screendescriptors festgelegt wird.
 

d3n1s

Mitglied
danke, das klingt doch schon einmal interessant. wirklich was anfangen kann ich mit diesen informationen aber leider nicht. ein codebeispiel, wie man die auflösung eines PNG bildes mit "pixelsPerUnitXAxis" auslesen kann, wäre da sehr hilfreich.
 
S

Spacerat

Gast
Hmmm, wenn ich das richtig sehe muss bei dem Oben verlinkten nur die entsprechenden Strings austauschen. Da es sich aber um Meta-Daten handelt, sind diese aber nicht in jeder Datei des selben typs zu erwarten, weswegen es auch mal schiefgehen kann. Meta-Daten sind nunmal optional.
 

d3n1s

Mitglied
Ich hab jetzt eine methode, welche die Auflösung eines PNG-Bildes zurück gibt. Sie funktioniert auch bei JPEG-Bildern. Ist möglicherweise noch etwas zu kompliziert. Falls jemand einen Vorschlag hat um den Code zu verkürzen, dann nehme ich diesen natürlich gerne entgegen. Der Code ist größtenteils von dieser Seite: David Thielen's Home Page

Java:
    int xDPI;
    int yDPI;
    int resolution;
    File f = new File("C:/KABA/Praxisphase 3/Importer/raute.jpg");

    public int getPngResolution() throws IOException {
        ImageInputStream imageInput = ImageIO.createImageInputStream(f);
        Iterator it = ImageIO.getImageReaders(imageInput);
        ImageReader reader = (ImageReader) it.next();

        reader.setInput(imageInput);
        IIOMetadata meta = reader.getImageMetadata(0);
        org.w3c.dom.Node n = meta.getAsTree("javax_imageio_1.0");
        n = n.getFirstChild();

        while (n != null) {
            if (n.getNodeName().equals("Dimension")) {
                org.w3c.dom.Node n2 = n.getFirstChild();

                while (n2 != null) {
                    if (n2.getNodeName().equals("HorizontalPixelSize")) {
                        org.w3c.dom.NamedNodeMap nnm = n2.getAttributes();
                        org.w3c.dom.Node n3 = nnm.item(0);
                        float hps = Float.parseFloat(n3.getNodeValue());
                        xDPI = Math.round(25.4f / hps);
                    }
                    if (n2.getNodeName().equals("VerticalPixelSize")) {
                        org.w3c.dom.NamedNodeMap nnm = n2.getAttributes();
                        org.w3c.dom.Node n3 = nnm.item(0);
                        float vps = Float.parseFloat(n3.getNodeValue());
                        yDPI = Math.round(25.4f / vps);
                    }
                    n2 = n2.getNextSibling();
                }
            }
            n = n.getNextSibling();
        }

        if (xDPI == yDPI) {
            resolution = xDPI;
        } else {
            resolution = 0;
        }
        return resolution;
    }
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Auflösung einer Bild-Datei bekommen ohne sie herunterzuladen?? Java Basics - Anfänger-Themen 7
R Variablen Probleme mit Auflösung von Variablen Java Basics - Anfänger-Themen 4
D Dateigröße, Auflösung und Ausmaße eines Bildes auslesen Java Basics - Anfänger-Themen 8
hdi Desktop-Auflösung abfragen -> setLocation() von Frame Java Basics - Anfänger-Themen 5
D handy spiel auflösung ändern Java Basics - Anfänger-Themen 2
G Auflösung ermitteln Java Basics - Anfänger-Themen 3
F Auflösung ändern Java Basics - Anfänger-Themen 3
reibi TIFF nach BufferedImage wandeln Java Basics - Anfänger-Themen 72
C .tiff Dateien laden, bearbeiten(Werte einfügen),abspeichern Java Basics - Anfänger-Themen 11
M Java und Tiff-Daten Java Basics - Anfänger-Themen 3
Spandeli8 Erzeugte Objekte gegenüber Bildern hervorheben in Java Processing Java Basics - Anfänger-Themen 1
G Einbinden von Bildern in ausführbare Jar-Datei Java Basics - Anfänger-Themen 25
J Interface Einlesen von Bildern mithilfe von URL zu langsam Java Basics - Anfänger-Themen 5
S Jar Datei mit Bildern Java Basics - Anfänger-Themen 22
J Menü mit mehreren Bildern Java Basics - Anfänger-Themen 5
M Programm fertig stellen, Jar mit Bildern Java Basics - Anfänger-Themen 14
Spin Blatt mit Bildern füllen Java Basics - Anfänger-Themen 5
M Problem mit null pinterexception beim laden von Bildern Java Basics - Anfänger-Themen 20
P Erste Schritte Navigation mit wechselnden Bildern ... Java Basics - Anfänger-Themen 2
D .jar erstellen (mit Bildern) Java Basics - Anfänger-Themen 5
K einfaches Drucken von Text (und ggf Bildern,gemischt) Java Basics - Anfänger-Themen 11
M Java-Prog soll Texte innerhalb Bildern erkennen Java Basics - Anfänger-Themen 2
N Grafische Programmierung mit jeweils anderen Bildern bei versch. Ergebnissen Java Basics - Anfänger-Themen 9
S Bilder der Diashow werden in anderen Bildern angezeigt Java Basics - Anfänger-Themen 3
M Javaprogramm mit Bildern als .jar-Datei exportieren(in Eclipse) Java Basics - Anfänger-Themen 10
H Probleme mit .Jar in Verbindung mit Bildern Java Basics - Anfänger-Themen 10
N auswertung von bildern Java Basics - Anfänger-Themen 14
Piwi Relative Pfadangabe bei Bildern Java Basics - Anfänger-Themen 2
F Unterschied im Einfügen von Bildern in Applets vs Applications Java Basics - Anfänger-Themen 6
P [Positiv Erledigt] Ordner mit Bildern auslesen und diese speichern Java Basics - Anfänger-Themen 7
N this beim einlesen von bildern Java Basics - Anfänger-Themen 4
D Wasserzeichen in Bildern Java Basics - Anfänger-Themen 16
G Verzeichnis auslesen mit sehr sehr vielen Bildern Java Basics - Anfänger-Themen 6
B Stack mit Bildern füllen Java Basics - Anfänger-Themen 2
S java.lang.NullPointerException bei Bildern Java Basics - Anfänger-Themen 13
B Fragen zu JAR mit Bildern Java Basics - Anfänger-Themen 4
B Problem beim Laden von Bildern mit AWT Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben