DPI von einem Bild definieren

unknown

Bekanntes Mitglied
Hallo zusammen,

Ich möchte meine BufferedImages nicht mit 72 sondern 300 DPI speichern.
Im Netz habe ich den folgenden Code gefunden. Der funktioniert allerdings nur für PNG. Andere Formate ausser Bitmap (BMP) werden zwar gespeichert, sie haben allerdings immer noch 72 DPI.

Weiss jemand wo ich den Code anpassen sollte, damit er für alle anderen Formate auch funktioniert?

Java:
             BufferedImage image = ImageIO.read(url);

            File output = new File("C:\\test\\out.JPG");

            final String formatName = "JPG";

            for (Iterator<ImageWriter> iw = ImageIO.getImageWritersByFormatName(formatName); iw.hasNext();) {
                ImageWriter writer = iw.next();
                ImageWriteParam writeParam = writer.getDefaultWriteParam();
                ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
                IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, writeParam);
                if (metadata.isReadOnly() || !metadata.isStandardMetadataFormatSupported()) {
                    continue;
                }

                setDPI(metadata);

                final ImageOutputStream stream = ImageIO.createImageOutputStream(output);
                try {
                    writer.setOutput(stream);
                    writer.write(metadata, new IIOImage(image, null, metadata), writeParam);
                } finally {
                    stream.close();
                }
                break;
            }
Java:
    private static void setDPI(IIOMetadata metadata) throws IIOInvalidTreeException {

       // for PNG, it's dots per millimeter
       double dotsPerMilli = 1.0 * 300 / 10 / 2.54;

       IIOMetadataNode horiz = new IIOMetadataNode("HorizontalPixelSize");
       horiz.setAttribute("value", Double.toString(dotsPerMilli));

       IIOMetadataNode vert = new IIOMetadataNode("VerticalPixelSize");
       vert.setAttribute("value", Double.toString(dotsPerMilli));

       IIOMetadataNode dim = new IIOMetadataNode("Dimension");
       dim.appendChild(horiz);
       dim.appendChild(vert);

       IIOMetadataNode root = new IIOMetadataNode("javax_imageio_1.0");
       root.appendChild(dim);

       metadata.mergeTree("javax_imageio_1.0", root);
    }
 

unknown

Bekanntes Mitglied
Dies ist eine Anforderung in diesem Projekt. Es muss doch eine Lösung dafür geben. Was ist mit den restlichen Formaten GIF, TIF etc.?
 

nvidia

Bekanntes Mitglied
Bei dir liegt ein Missverständnis vor was DPI/PPI bedeutet. Die Anzahl der Pixel deines Bildes wird allein durch die Auflösung bestimmt in der es gemacht wurde, sei es ein Screenshot oder ein Bild durch eine Digitalkamera. DPI/PPI drückt an dieser Stelle noch überhaupt nichts aus.

Das DPI/PPI Geraffel ist für die Ausgabe auf z.B. einem Monitor oder Drucker, da ist es mehr oder minder ein Faktor um zu bestimmen wie viele Pixel der Drucker denn so pro Zoll auf das Papier bringt und je nachdem auch dein Ausdruck aussieht. Es gibt aber Bildbearbeitungsprogramme wenn du da z.B. 72 DPI stehen hast und 300 einträgst die dir das von der Größe her (durch resampling) vervierfachen, da du aber nur eine bestimmte Anzahl an Pixeln hast werden die auch aufgeblasen was dann eine schlechtere Qualität zur Folge hat (in der 100% Ansicht).

Falls du nicht überzeugt bist, such einfach mal im Netz nach z.B. photography dots per inch, etc. Es gibt nämlich genug Hobbydigitalkameraphotographen denen der Zusammenhang auch nicht ganz klar ist. Und aus der Ecke Fotografie kommen die Bezeichnungen IMHO.
 

nvidia

Bekanntes Mitglied
BMP und JPEG haben keine DPI Angabe in ihrem Format. Wozu willst du das denn machen?

Das ist nicht richtig diese Angabe existiert bei BMP und JPEG, bei BMP wird sie im Header unter dem Offset 26h und 2Ah angegeben und zwar in Pixeln pro Meter, man muss das also noch umrechnen auf DPI/PPI. Das Äquivalent in JPEG sind die werte für die "pixel density" in x,y-Richtung. Die Anzeige dieses Wertes für den Nutzer ist dann abhängig von dem Programm was er verwendet. Schreibt man beim Bitmap z.B. 0 an die Stellen gibt Windows irgendeinen Defaultwert aus, IMHO 96 dpi wenn man über die Rechtsklick-Eigenschaften geht.
 

unknown

Bekanntes Mitglied
Das ist nicht richtig diese Angabe existiert bei BMP und JPEG, bei BMP wird sie im Header unter dem Offset 26h und 2Ah angegeben und zwar in Pixeln pro Meter, man muss das also noch umrechnen auf DPI/PPI. Das Äquivalent in JPEG sind die werte für die "pixel density" in x,y-Richtung. Die Anzeige dieses Wertes für den Nutzer ist dann abhängig von dem Programm was er verwendet. Schreibt man beim Bitmap z.B. 0 an die Stellen gibt Windows irgendeinen Defaultwert aus, IMHO 96 dpi wenn man über die Rechtsklick-Eigenschaften geht.
Danke für deine Antwort.
Könnte man das was du erklärt hast, direkt in meinem Code einbinden? Zurzeit werden BMP mit meinem Code erst gar nicht gespeichert.
Wo kann ich mir solche Infos für jedes einzelne Format holen? Muss eben das gleiche auch mit GIF, TIF machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
B Generierung einer Wertetabelle aus einem Bild Spiele- und Multimedia-Programmierung 3
N Farberkennung und -ersetzung in einem Bild Spiele- und Multimedia-Programmierung 2
K Einzelne Pixel in einem Bild lesen Spiele- und Multimedia-Programmierung 5
E Rendering order auf einem ismetrischen Grid Spiele- und Multimedia-Programmierung 8
P Wie kann ich einem Programm hinter eine GUI verstecken? Spiele- und Multimedia-Programmierung 12
J (Libgdx) animation nur einmal in einem Event aufrufen Spiele- und Multimedia-Programmierung 1
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
P selectedItem aus einem Methodenerstellten JPanel auslesen. Spiele- und Multimedia-Programmierung 5
O Problem beim Aufrufen des Spiels von einem Menü Spiele- und Multimedia-Programmierung 7
G Entity Verwaltung in einem 2D Spiel Spiele- und Multimedia-Programmierung 1
G Collision Detection in einem 2D Sandbox Game. Spiele- und Multimedia-Programmierung 2
E Einem A*-Pfad folgen Spiele- und Multimedia-Programmierung 27
G Auf einem Stick bewegen Spiele- und Multimedia-Programmierung 5
windl MP3-Tags von einem Inputstream auslesen Spiele- und Multimedia-Programmierung 5
X Erklärung zu einem Tic Tac Toe Spiel Spiele- und Multimedia-Programmierung 1
C Hilfe bei einem Mosaikspiel Spiele- und Multimedia-Programmierung 16
M [JOGL] Maus über einem gezeichnetem Objekt abfragen? Spiele- und Multimedia-Programmierung 5
P Winkel von einem Punkt zum anderen berechnen Spiele- und Multimedia-Programmierung 9
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
S Java3D: Primitives zu einem Objekt kombinieren Spiele- und Multimedia-Programmierung 7
Fl4sh1 Datum und Uhrzeit von einem Ereignis ausgeben lassen Spiele- und Multimedia-Programmierung 3
P Frage zu einem Projekt "Einarmiger Bandit" 3 Walzen / 9 Zeichnungen BLUEJ Spiele- und Multimedia-Programmierung 10
K Grundsätzlicher Spieleaufbau an (m)einem Beispiel Spiele- und Multimedia-Programmierung 4
S Problem mit Sichtfeld/Licht in einem Raster Spiele- und Multimedia-Programmierung 5
A Drehen von einem Image Spiele- und Multimedia-Programmierung 4
F Bot updaten von einem Browser game Spiele- und Multimedia-Programmierung 7
W Java3D: Kanten die hinter einem Objekt liegen werden gezeigt Spiele- und Multimedia-Programmierung 2
B Reset bei einem Spiel Spiele- und Multimedia-Programmierung 16
C auf einem PC kein mp3 unter Java Spiele- und Multimedia-Programmierung 6
A Steuerung des Bewegungsflusses bei einem Netzwerkspiel Spiele- und Multimedia-Programmierung 18
R Mehrere Shader in einem Program Spiele- und Multimedia-Programmierung 8
Z Kugeln aufgrund von Daten aus einem Array verschieben Spiele- und Multimedia-Programmierung 2
S Probleme mit JMenu in einem JFrame mit BufferStrategy Spiele- und Multimedia-Programmierung 2
K Kanten anzeigen lassen in einem Shape3D-Objekt Spiele- und Multimedia-Programmierung 4
A Interaktion von J3D in einem Applet Spiele- und Multimedia-Programmierung 4
N In einem Kasten springende Bälle programmieren...Hilfe Spiele- und Multimedia-Programmierung 7
H Speichern und Öffnen von einem Zeichenprogramm Spiele- und Multimedia-Programmierung 4
A Wie kann ich die Dateigröße aus einem tiff auslesen? Spiele- und Multimedia-Programmierung 2
hdi mehrere Threads/Tasks in einem synchronisieren -> TaskPoo Spiele- und Multimedia-Programmierung 36
F Umsetzung von einem Partikelsystem Spiele- und Multimedia-Programmierung 4
J Java3D Rotationsproblem bei einem 3D-Maennchen Spiele- und Multimedia-Programmierung 3
B Frage zur Spielsteuerung bei einem rundenbasiertes Spiel Spiele- und Multimedia-Programmierung 5
K Seitenlänge aus einem Würfel lesen Spiele- und Multimedia-Programmierung 3
T Kollisionsabfrage von einem Stein mit einem Ball Spiele- und Multimedia-Programmierung 5
G Einen gif oder jpg Datei aus einem Graphics Objekt o. JFrame Spiele- und Multimedia-Programmierung 2
A 3D Gegenstand in einem 2D Koordinatensystem darstellen. Spiele- und Multimedia-Programmierung 3
K Hilfe bei Grafikeinbindung in einem Spiel Spiele- und Multimedia-Programmierung 6
D Image.getGraphics() in einem Frame Spiele- und Multimedia-Programmierung 4
G Bufferimage bei einem Frame Spiele- und Multimedia-Programmierung 4
I Zweite Kamera in einem SimpleUniverse Spiele- und Multimedia-Programmierung 6
B Bild wird nicht geladen Spiele- und Multimedia-Programmierung 4
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
S Wie kann ich ein Bild in einen Frame einfügen? Spiele- und Multimedia-Programmierung 2
J Bild ohne Quallitätsverlust skalieren Spiele- und Multimedia-Programmierung 11
Silvascus Bild --> JFrame Hintergrund Spiele- und Multimedia-Programmierung 3
D getsubimage aus BufferedImage und Rueckwandlung in ein ImagePlus bild Spiele- und Multimedia-Programmierung 0
A Bild(sequenz) wird nicht geladen Spiele- und Multimedia-Programmierung 1
windl EXIFF Header in ein Bild schreiben Spiele- und Multimedia-Programmierung 0
L Bild in Richtung Maus drehen Spiele- und Multimedia-Programmierung 4
B Bild ohne Image auf die Festplatte streamen Spiele- und Multimedia-Programmierung 4
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
F [JMyron] Bild von int[] zu BufferedImage Spiele- und Multimedia-Programmierung 2
Hoppelmann Alphamap (Bild) für 3D-Terrain generieren Spiele- und Multimedia-Programmierung 2
K Bild von USB-Webcam über JMF Spiele- und Multimedia-Programmierung 2
S Wolken Bild/Grafik vom Programm erstellen lassen Spiele- und Multimedia-Programmierung 11
P Bild Pixelweise auslesen Spiele- und Multimedia-Programmierung 13
K Bild berührt Bild Spiele- und Multimedia-Programmierung 29
aze Nicht rechteckiges Bild zeichnen Spiele- und Multimedia-Programmierung 5
A Bild einer Webcam auffangen Spiele- und Multimedia-Programmierung 20
lumo LWJGL - Bild rendern Spiele- und Multimedia-Programmierung 16
A .jpg-Bild auf andere Position verschieben Spiele- und Multimedia-Programmierung 4
F Bild im sourcecode Spiele- und Multimedia-Programmierung 32
F Bild einfärben Spiele- und Multimedia-Programmierung 5
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
Q Rechteck in BIld suchen Spiele- und Multimedia-Programmierung 8
M Bild kopieren Spiele- und Multimedia-Programmierung 2
S Bild capturen mit direcShow Spiele- und Multimedia-Programmierung 2
B Character Bild links/rechts Spiele- und Multimedia-Programmierung 19
Developer_X Bild Größe einstellen Spiele- und Multimedia-Programmierung 2
ARadauer bild in bild suchen Spiele- und Multimedia-Programmierung 6
M 2D - Bild um y-Achse drehen Spiele- und Multimedia-Programmierung 9
S Bild spiegeln Spiele- und Multimedia-Programmierung 7
G Palette aus Bild extrahieren Spiele- und Multimedia-Programmierung 5
A Wasserzeichen auf Bild Spiele- und Multimedia-Programmierung 2
G Paintsurface ins Bild konvertieren Spiele- und Multimedia-Programmierung 8
M Sich nach links verschiebendes Bild Spiele- und Multimedia-Programmierung 2
F Bild generieren Spiele- und Multimedia-Programmierung 3
J Animation hinter transparentem Bild auf der GlassPane Spiele- und Multimedia-Programmierung 6
A Kein Bild Spiele- und Multimedia-Programmierung 3
T Bild als mehrdimesionaler Array Spiele- und Multimedia-Programmierung 4
H Bild von Webcam laden Spiele- und Multimedia-Programmierung 4
P Bild, Pixel- / Bereichsfarbe auslesen Spiele- und Multimedia-Programmierung 12
G start Bild einfrügen in ein Java Spiel Spiele- und Multimedia-Programmierung 7
Quaxli off-topic: HDR-Bild errechnen Spiele- und Multimedia-Programmierung 3
P linie in bild zeichnen Spiele- und Multimedia-Programmierung 2
G Auf Tastendruck bild verschieben Spiele- und Multimedia-Programmierung 5
O ich hab da ein problem mit nem bild Spiele- und Multimedia-Programmierung 8
C JPEG oder BMP Bild erstellen Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben