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



## d3n1s (2. Mrz 2010)

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:

```
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;
}
```


----------



## nrg (2. Mrz 2010)

durch Let me google that for you
findet man (erster hit http://www.java-forum.org/java-basics-anfaenger-themen/96865-dateigroesse-aufloesung-ausmasse-bildes-auslesen.html) : Java 2D - How to read DPI from an Image

edit: und ich sollte mal besser hinschauen und die namen vergleichen . warum machst du noch einen Thread auf???


----------



## d3n1s (2. Mrz 2010)

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 (2. Mrz 2010)

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)
> 
> ...


----------



## Spacerat (2. Mrz 2010)

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 (2. Mrz 2010)

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.


----------



## d3n1s (3. Mrz 2010)

das ist wohl ein problem, mit dem sich noch nie jemand beschäftigt hat. schade


----------



## Spacerat (3. Mrz 2010)

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 (3. Mrz 2010)

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


```
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;
    }
```


----------



## d3n1s (5. Mrz 2010)

hat jemand eine Ahnung, wie man von einem TIFF-Bild die Auflösung in dpi ausliest?


----------

