Bildgröße

dalco

Aktives Mitglied
hallo,
ich möchte gerne die Breite und Höhe eines Fotos ermitteln mit:
Java:
BufferedImage image = ImageIO.read(file);
             double b = image.getWidth();
             double h = image.getHeight();
             System.out.println("Originalwerte: "+b+" - "+h);

jetzt werden mir aber immer : 5472 <> 3648 angezeigt, also passend für ein Breit-Bild,
wenn ich ein Hochkant-Bild hochlade kommen die selben Werte, müsste ja aber : 3648 <> 5472 anzeigen ???
Warum dass, ich benutze Win11, dass die Bilder ja automatisch gedreht anzeigt...
Früher bei älteren Windows musste ich ja die quer angezeigten Hochkantbilder erst per Hand drehen, mit denen passt es noch, aber heute
bei den neuen werden immer die Breitbild-Werte angezeigt.

Danke für iregend eine Idee.
MFG Tino
 

KonradN

Super-Moderator
Mitarbeiter
Ich nehme an, dass Du Bilder einer Kamera betrachtest und diese Bilder sind bei Dir generell 5472 x 3648 Pixel. Das wäre dann halt das Format des Bildes und das ist immer gleich. Das ändert sich auch nicht, wenn Du die Kamera drehst.

Diverse Formate haben aber auch noch Metadaten mit im Dateiformat. Da Windows Bilder automatisch dreht beim Anzeigen nehme ich an, dass das Programm diese Metadaten auswertet und dann die Ausrichtung auswertet.

Um das auszuwerten ist es evtl. sinnvoll, die Apache commons imaging Library zu nutzen: https://github.com/apache/commons-imaging

Die Metadaten lassen sich aber auch ohne lesen mit etwas wie (ChatGPT erzeugt, aber ImageIO, ImageReader und so sieht korrekt benutzt aus auf den ersten Blick):
Java:
import javax.imageio.ImageIO;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.io.File;
import java.io.IOException;

public class ImageMetadataExample {
    public static void main(String[] args) {
        try {
            // Lade das Bild in ein BufferedImage
            File file = new File("deinBild.jpg");
            BufferedImage image = ImageIO.read(file);

            // Lade das Bild erneut, aber diesmal als ImageInputStream, um auf die Metadaten zuzugreifen
            ImageInputStream iis = ImageIO.createImageInputStream(file);
            ImageReader reader = ImageIO.getImageReaders(iis).next();
            reader.setInput(iis, true);

            // Hole die Metadaten
            IIOMetadata metadata = reader.getImageMetadata(0);

            // Überprüfe, ob Metadaten vorhanden sind und hole sie, wenn ja
            if (metadata != null) {
                // Hier kannst du auf die Metadaten zugreifen und sie analysieren
                // Zum Beispiel: metadata.getAsTree("javax_imageio_jpeg_image_1.0");
                //          : metadata.getAsTree("com_sun_media_imageio_plugins_tiff_image_1.0");
            } else {
                System.out.println("Das Bild enthält keine Metadaten.");
            }

            // Schließe den ImageInputStream
            iis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Das wäre dann hier meine Vermutung. Falls das vermutete Szenario nicht zutreffen sollte kannst Du ja dennoch einmal die Metadaten der Bilder prüfen - evtl. wird die Vermutung mit der Auswertung der Metadaten ja bestätigt.
 

Blender3D

Top Contributor
Warum dass, ich benutze Win11, dass die Bilder ja automatisch gedreht anzeigt...
Früher bei älteren Windows musste ich ja die quer angezeigten Hochkantbilder erst per Hand drehen, mit denen passt es noch, aber heute
bei den neuen werden immer die Breitbild-Werte angezeigt.
Java zeigt dir die korrekten Werte an. Das System verwendet eine App die, dir die Bilder anzeigt und automatisch anpasst. In Java kannst du auch so etwas bewirken indem du Breite- Höheverhältnis auf die gewünschte Darstellung umrechnest und das Bild entsprechend skalierst.
Du darfst nicht die Funktionen des System mit Java verwechseln.
 

dalco

Aktives Mitglied
Ich nehme an, dass Du Bilder einer Kamera betrachtest und diese Bilder sind bei Dir generell 5472 x 3648 Pixel. Das wäre dann halt das Format des Bildes und das ist immer gleich. Das ändert sich auch nicht, wenn Du die Kamera drehst.

Diverse Formate haben aber auch noch Metadaten mit im Dateiformat. Da Windows Bilder automatisch dreht beim Anzeigen nehme ich an, dass das Programm diese Metadaten auswertet und dann die Ausrichtung auswertet.

Um das auszuwerten ist es evtl. sinnvoll, die Apache commons imaging Library zu nutzen: https://github.com/apache/commons-imaging

Die Metadaten lassen sich aber auch ohne lesen mit etwas wie (ChatGPT erzeugt, aber ImageIO, ImageReader und so sieht korrekt benutzt aus auf den ersten Blick):
Java:
import javax.imageio.ImageIO;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.io.File;
import java.io.IOException;

public class ImageMetadataExample {
    public static void main(String[] args) {
        try {
            // Lade das Bild in ein BufferedImage
            File file = new File("deinBild.jpg");
            BufferedImage image = ImageIO.read(file);

            // Lade das Bild erneut, aber diesmal als ImageInputStream, um auf die Metadaten zuzugreifen
            ImageInputStream iis = ImageIO.createImageInputStream(file);
            ImageReader reader = ImageIO.getImageReaders(iis).next();
            reader.setInput(iis, true);

            // Hole die Metadaten
            IIOMetadata metadata = reader.getImageMetadata(0);

            // Überprüfe, ob Metadaten vorhanden sind und hole sie, wenn ja
            if (metadata != null) {
                // Hier kannst du auf die Metadaten zugreifen und sie analysieren
                // Zum Beispiel: metadata.getAsTree("javax_imageio_jpeg_image_1.0");
                //          : metadata.getAsTree("com_sun_media_imageio_plugins_tiff_image_1.0");
            } else {
                System.out.println("Das Bild enthält keine Metadaten.");
            }

            // Schließe den ImageInputStream
            iis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Das wäre dann hier meine Vermutung. Falls das vermutete Szenario nicht zutreffen sollte kannst Du ja dennoch einmal die Metadaten der Bilder prüfen - evtl. wird die Vermutung mit der Auswertung der Metadaten ja bestätigt.

hallo, danke schon mal,
ja das Format ist immer: 5472 x 3648, mit image.getWidth(); bekomme ich aber leider den Wert: 5472 bei einem Hochkantbild und nicht 3648.
Hintergrund des ganzen ist, ich will herausfinden ob Hochkant oder Breitbild, da ich es mit "
net.coobird.thumbnailator.Thumbnails;"
verkleinern möchte für mein Tablet, App etc.,...
Wie komme ich nun bei deinem Beispiel: // Hole die Metadaten
an die richtige Breite eines Hochkantbildes, also an die 3648....
 

dalco

Aktives Mitglied
wenn ich wie eben versucht:
reader.getWidth(0) ausgebe bekomme ich schon wieder 5472 bei einem Hochkantbild ???

Das muss doch iregdnwas mit dem Win11 zu tun haben.... grad nochmal beim alten Win7 Laptop gemacht und da ist es korrekt, allerdings werden da Hochkantbilder quer angezeigt Out-of-the-camera und ich musste sie per Hand drehen.
 

KonradN

Super-Moderator
Mitarbeiter
Wie komme ich nun bei deinem Beispiel: // Hole die Metadaten
an die richtige Breite eines Hochkantbildes, also an die 3648....
Da kann ich Dir nur empfehlen, dir die Metadaten einmal anzusehen. Mittels getStandardTree() bekommst Du einen IOMetadataNode und da kannst Du dann rekursiv durchgehen (getChildNodes()) bzw. dir Details des Nodes anzeigen lassen (getNodeName, getNodeType, getNodeValue)

Damit kannst Du dann sehen, was für Metadata gesetzt ist.

Wenn man davon ausgeht, dass die Metadaten vermutlich als exif Metadata geschrieben wurden, dann ist es über eine Library deutlich einfacher. Die apache commons imaging Library hatte ich dazu ja bereits erwähnt.

wenn ich wie eben versucht:
reader.getWidth(0) ausgebe bekomme ich schon wieder 5472 bei einem Hochkantbild ???
Die Bilder haben nun einmal mit genau diese Breite. Wenn Du es bildlich ausdrücken willst: Hinten drauf steht irgendwo bei einer Kante "oben" oder es ist ein Pfeil abgebildet, der beim aufhängen nach oben zeigen soll. Aber das Bild ist und bleibt immer ein Bild das diese Breite und eben die kleinere Höhe hat. Und das auch immer - wenn es gelagert wird - auf eben der breiten, unteren Kante gelagert wird.
 

dalco

Aktives Mitglied
hi,
dank dir wirklich vielmals, ich kann mir das ganze schon vorstellen, nur warum war es bei Win7 mit dem lächerlichen Einzeiler....getWidht() super
möglich an die 3648 zu kommen, mehr will ich doch gar nicht...
Und nochwas wenn ich im Explorer mouseover mäßig über die Bilder gehe wird ja beim Hochkantbild auch 3648 x 5472 angezeigt.
Was denkst du ist das allereinfachste für nen rel. Laien wie mich im Java rauszufinden ob Hochkant oder Breitbild.

Wird im Leben alles nur schwieriger :(
 

KonradN

Super-Moderator
Mitarbeiter
Also wenn Du früher mit getWidth in Java die Breite bekommen hast, dann hat sich entweder an den Bildern etwas geändert oder es läuft etwas anderes falsch. Bei Java hat sich diesbezüglich nichts geändert, daher würde ich da erst einmal ausschließen, dass sich da irgend etwas geändert hat.

Bist Du sicher, dass file in Deinem Code im ersten Post auf ein entsprechendes Bild zeigt?
 

dalco

Aktives Mitglied
Also wenn Du früher mit getWidth in Java die Breite bekommen hast, dann hat sich entweder an den Bildern etwas geändert oder es läuft etwas anderes falsch. Bei Java hat sich diesbezüglich nichts geändert, daher würde ich da erst einmal ausschließen, dass sich da irgend etwas geändert hat.

Bist Du sicher, dass file in Deinem Code im ersten Post auf ein entsprechendes Bild zeigt?
ja klar, das Bild lasse ich ja sogar als kleinen Thumbnail anzeigen, es ist alles das selbe, es muss am Windows liegen...kanntest du das nicht früher win7, winXP... wenn man da zb. seine Urlaubsbilder auf den PC hat waren die Hochkant alle in quer und du musstest sie per Hand zb. mit der Fotoanzeige drehen.... jetzt bei win10,11 natürlich automatisch, aber dieses fiese getWidth() gibt mir einfach beim Hochkantbild die 5472 von einem Breitbild an.
 

KonradN

Super-Moderator
Mitarbeiter
Jetzt verwirrst Du mich - also musstest Du "früher" alles drehen. Also ist das Bild schlicht "falsch" und hat vermutlich in den Metadaten, die Windows nun auswertet und das Bild schlicht gedreht anzeigt.

==> Es ist also eine neue Funktionalität in manchen Programmen, die das Bild automatisch dreht
==> ohne diese Funktionalität ist es so, wie es halt auch Java macht: Es wird schlicht so angezeigt, wie es gespeichert wurde und die Metadaten werden ignoriert.

Ist ja auch klar: Das BufferedImage hat diese Metadaten ja auch gar nicht. Die werden beim Einlesen des BufferedImages ignoriert. Daher wird es in Code wie in #2 auch zwei mal gelesen. Einmal wird das BufferedImage geladen (Zeile 13) und dann wird separat die Datei erneut gelesen (Zeilen 16ff)

Und wenn Du dieses automatische drehen auch in Java haben willst, dann musst Du es selbst programmieren. Wenn es unter Windows passiert, dann sollte es an Exif Metadata liegen - diese kannst Du also mit einer Library auswerten.

Ich habe das einmal von ChatGPT programmieren lassen - das ist aber ungetestet. Und das nutzt apache commons imaging:
Java:
import org.apache.commons.imaging.ImageReadException;
import org.apache.commons.imaging.Imaging;
import org.apache.commons.imaging.common.IImageMetadata;
import org.apache.commons.imaging.common.ImageMetadata;
import org.apache.commons.imaging.common.RationalNumber;
import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
import org.apache.commons.imaging.formats.jpeg.exif.ExifRewriter;
import org.apache.commons.imaging.formats.jpeg.exif.ExifRewriter.Options;
import org.apache.commons.imaging.formats.jpeg.exif.ExifTagConstants;

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class ExifAutoRotateToBufferedImageExample {
    public static void main(String[] args) {
        try {
            File inputFile = new File("deinBild.jpg");

            // Lade das Bild und seine Metadaten
            IImageMetadata metadata = Imaging.getMetadata(inputFile);

            // Lade das Bild in ein BufferedImage
            BufferedImage originalImage = Imaging.getBufferedImage(inputFile);

            // Überprüfe, ob das Bild Exif-Metadaten enthält und ob es gedreht werden muss
            if (metadata instanceof JpegImageMetadata) {
                JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
                Integer orientation = jpegMetadata.findEXIFValueWithExactMatch(ExifTagConstants.EXIF_TAG_ORIENTATION).getIntValue();

                if (orientation != null && orientation != 1) {
                    // Das Bild muss gedreht werden
                    originalImage = rotateImage(originalImage, orientation);
                }
            }

            // Speichere das gedrehte Bild in ein neues BufferedImage
            BufferedImage rotatedImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), originalImage.getType());
            Graphics2D g2d = rotatedImage.createGraphics();
            g2d.drawImage(originalImage, 0, 0, null);
            g2d.dispose();

            // Jetzt hast du das Bild in einem BufferedImage, das die Exif-Metadaten berücksichtigt
            // Verwende rotatedImage für weitere Verarbeitungszwecke
        } catch (ImageReadException | IOException e) {
            e.printStackTrace();
        }
    }

    // Methode zum Drehen des Bildes basierend auf der Ausrichtungsinformation
    private static BufferedImage rotateImage(BufferedImage originalImage, int orientation) {
        AffineTransform transform = new AffineTransform();
        switch (orientation) {
            case 2:
                transform.scale(-1, 1);
                break;
            case 3:
                transform.rotate(Math.PI, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
                break;
            case 4:
                transform.rotate(Math.PI, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
                transform.scale(-1, 1);
                break;
            case 5:
                transform.rotate(Math.PI / 2, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
                transform.scale(-1, 1);
                break;
            case 6:
                transform.rotate(Math.PI / 2, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
                break;
            case 7:
                transform.rotate(-Math.PI / 2, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
                transform.scale(-1, 1);
                break;
            case 8:
                transform.rotate(-Math.PI / 2, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
                break;
            default:
                break;
        }

        BufferedImage rotatedImage = new BufferedImage(originalImage.getHeight(), originalImage.getWidth(), originalImage.getType());
        Graphics2D g2d = rotatedImage.createGraphics();
        g2d.setTransform(transform);
        g2d.drawImage(originalImage, 0, 0, null);
        g2d.dispose();

        return rotatedImage;
    }
}

Damit solltest Du einen Ansatz haben, wie es aussehen könnte.
 

dalco

Aktives Mitglied
Jetzt verwirrst Du mich - also musstest Du "früher" alles drehen. Also ist das Bild schlicht "falsch" und hat vermutlich in den Metadaten, die Windows nun auswertet und das Bild schlicht gedreht anzeigt.

==> Es ist also eine neue Funktionalität in manchen Programmen, die das Bild automatisch dreht
==> ohne diese Funktionalität ist es so, wie es halt auch Java macht: Es wird schlicht so angezeigt, wie es gespeichert wurde und die Metadaten werden ignoriert.

Ist ja auch klar: Das BufferedImage hat diese Metadaten ja auch gar nicht. Die werden beim Einlesen des BufferedImages ignoriert. Daher wird es in Code wie in #2 auch zwei mal gelesen. Einmal wird das BufferedImage geladen (Zeile 13) und dann wird separat die Datei erneut gelesen (Zeilen 16ff)

Und wenn Du dieses automatische drehen auch in Java haben willst, dann musst Du es selbst programmieren. Wenn es unter Windows passiert, dann sollte es an Exif Metadata liegen - diese kannst Du also mit einer Library auswerten.

Ich habe das einmal von ChatGPT programmieren lassen - das ist aber ungetestet. Und das nutzt apache commons imaging:
Java:
import org.apache.commons.imaging.ImageReadException;
import org.apache.commons.imaging.Imaging;
import org.apache.commons.imaging.common.IImageMetadata;
import org.apache.commons.imaging.common.ImageMetadata;
import org.apache.commons.imaging.common.RationalNumber;
import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
import org.apache.commons.imaging.formats.jpeg.exif.ExifRewriter;
import org.apache.commons.imaging.formats.jpeg.exif.ExifRewriter.Options;
import org.apache.commons.imaging.formats.jpeg.exif.ExifTagConstants;

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class ExifAutoRotateToBufferedImageExample {
    public static void main(String[] args) {
        try {
            File inputFile = new File("deinBild.jpg");

            // Lade das Bild und seine Metadaten
            IImageMetadata metadata = Imaging.getMetadata(inputFile);

            // Lade das Bild in ein BufferedImage
            BufferedImage originalImage = Imaging.getBufferedImage(inputFile);

            // Überprüfe, ob das Bild Exif-Metadaten enthält und ob es gedreht werden muss
            if (metadata instanceof JpegImageMetadata) {
                JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
                Integer orientation = jpegMetadata.findEXIFValueWithExactMatch(ExifTagConstants.EXIF_TAG_ORIENTATION).getIntValue();

                if (orientation != null && orientation != 1) {
                    // Das Bild muss gedreht werden
                    originalImage = rotateImage(originalImage, orientation);
                }
            }

            // Speichere das gedrehte Bild in ein neues BufferedImage
            BufferedImage rotatedImage = new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), originalImage.getType());
            Graphics2D g2d = rotatedImage.createGraphics();
            g2d.drawImage(originalImage, 0, 0, null);
            g2d.dispose();

            // Jetzt hast du das Bild in einem BufferedImage, das die Exif-Metadaten berücksichtigt
            // Verwende rotatedImage für weitere Verarbeitungszwecke
        } catch (ImageReadException | IOException e) {
            e.printStackTrace();
        }
    }

    // Methode zum Drehen des Bildes basierend auf der Ausrichtungsinformation
    private static BufferedImage rotateImage(BufferedImage originalImage, int orientation) {
        AffineTransform transform = new AffineTransform();
        switch (orientation) {
            case 2:
                transform.scale(-1, 1);
                break;
            case 3:
                transform.rotate(Math.PI, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
                break;
            case 4:
                transform.rotate(Math.PI, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
                transform.scale(-1, 1);
                break;
            case 5:
                transform.rotate(Math.PI / 2, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
                transform.scale(-1, 1);
                break;
            case 6:
                transform.rotate(Math.PI / 2, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
                break;
            case 7:
                transform.rotate(-Math.PI / 2, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
                transform.scale(-1, 1);
                break;
            case 8:
                transform.rotate(-Math.PI / 2, originalImage.getWidth() / 2, originalImage.getHeight() / 2);
                break;
            default:
                break;
        }

        BufferedImage rotatedImage = new BufferedImage(originalImage.getHeight(), originalImage.getWidth(), originalImage.getType());
        Graphics2D g2d = rotatedImage.createGraphics();
        g2d.setTransform(transform);
        g2d.drawImage(originalImage, 0, 0, null);
        g2d.dispose();

        return rotatedImage;
    }
}

Damit solltest Du einen Ansatz haben, wie es aussehen könnte.
hi,
naja wie gesagt mit winXP ja, jetzt mit win10,11 natürlich nicht mehr, alle bilder passen.
es passt an sich ja alles, ich will ja mittels java keine bilder drehen, ich wollte lediglich mit getWidth() wie immer an meine Bildbreite kommen und NICHT wie bei nem Breitbild an die 5678 sondern an die 3648.
Ich teste deinen Code mal, danke
 

dalco

Aktives Mitglied
hi nochmal,
also ich komme nicht weiter, ich wollte doch nur mit:
Java:
BufferedImage image = ImageIO.read(file);
double b = image.getWidth();
double h = image.getHeight();
System.out.println("Originalwerte: "+b+" - "+h);
an die beiden Werte eines meiner stink normal aus der Kamera kommenden Fotos kommen und nicht dass ich es unverständlich formuliert habe....
ich bekomme bei einem Hochkantbild für getWidth() den "breiten" Wert also 5478 als Breite, es sind ja aber die 3648.
 

KonradN

Super-Moderator
Mitarbeiter
Und nur um es noch einmal ganz deutlich zu sagen:
Die Kamera hat einen Bildsensor mit einer Breite von 5478 Pixel und einer Höhe von 3648 Pixeln.

Daher haben alle Bilder dieser Kamera eine Breite von 5478 und Höhe von 3648.

Was die Kamera zusätzlich macht: Es werden Informationen hinterlegt. In diesen Metadaten können ganz viele diverse Informationen sein wie GPS Position, Ausrichtung der Kamera, Kameraeinstellungen u.s.w.

So lange wie Du die Metadaten nicht betrachtest ist das, was Du bekommst genau das, was Du haben willst. Die Breite eines jeden Bildes ist 5478. Das siehst Du auch, wenn Du bei der Software, mit der Du die Bilder betrachtest, das automatische Drehen ausschaltest. Das sollte bei Windows gehen, so ich das richtig gesehen habe.

Die Lösung selbst habe ich Dir genannt und vermutlich funktioniert der Code aus #10 auch direkt. Du kannst also das Bild entsprechend der Metadaten umwandeln und dann auf dem Ergebnis getWidth aufrufen. Oder Du veränderst nur den Code etwas - statt ein neues Bild in rotate zu erzeugen gibst du da einfach die Breite zurück. Diese ist entweder getWidth oder getHeight - Einfach einmal schauen, was bei den diversen Werten gemacht wird.
 

dalco

Aktives Mitglied
Und nur um es noch einmal ganz deutlich zu sagen:
Die Kamera hat einen Bildsensor mit einer Breite von 5478 Pixel und einer Höhe von 3648 Pixeln.

Daher haben alle Bilder dieser Kamera eine Breite von 5478 und Höhe von 3648.

Was die Kamera zusätzlich macht: Es werden Informationen hinterlegt. In diesen Metadaten können ganz viele diverse Informationen sein wie GPS Position, Ausrichtung der Kamera, Kameraeinstellungen u.s.w.

So lange wie Du die Metadaten nicht betrachtest ist das, was Du bekommst genau das, was Du haben willst. Die Breite eines jeden Bildes ist 5478. Das siehst Du auch, wenn Du bei der Software, mit der Du die Bilder betrachtest, das automatische Drehen ausschaltest. Das sollte bei Windows gehen, so ich das richtig gesehen habe.

Die Lösung selbst habe ich Dir genannt und vermutlich funktioniert der Code aus #10 auch direkt. Du kannst also das Bild entsprechend der Metadaten umwandeln und dann auf dem Ergebnis getWidth aufrufen. Oder Du veränderst nur den Code etwas - statt ein neues Bild in rotate zu erzeugen gibst du da einfach die Breite zurück. Diese ist entweder getWidth oder getHeight - Einfach einmal schauen, was bei den diversen Werten gemacht wird.
hi, klingt vielleicht forum-untypisch, aber kann ich dich mal eben anrufen wegen dem zeugs? :)
 

KonradN

Super-Moderator
Mitarbeiter
hi, klingt vielleicht forum-untypisch, aber kann ich dich mal eben anrufen wegen dem zeugs? :)
Telefonsupport kann ich hier leider nicht bieten. Aber Du kannst mir auch gerne mehr Details per Email (konrad at neitzel dot de) zusenden. Dann kannst Du mir evtl. dein konkretes Projekt beschreiben (was willst Du genau haben - also nicht dieses kleine Detailproblem sondern was sozusagen das große Ziel ist) und ggf. auch Dein Projekt (so Du eines hast) teilweise oder ganz geben für direkte Anpassungen. Dann kann ich Dich ggf. zu einer direkten Lösung des eigentlichen Problems führen.
Und ggf. bräuchte ich für Tests bei mir ein paar Beispiel-Bilder - ich selbst habe diesbezüglich keine Bilder zur Hand und habe auch keine Digitalkamera oder so (Außer dem Smartphone).

Auf sowas könnte ich mich einlassen.
 

dalco

Aktives Mitglied
Telefonsupport kann ich hier leider nicht bieten. Aber Du kannst mir auch gerne mehr Details per Email (konrad at neitzel dot de) zusenden. Dann kannst Du mir evtl. dein konkretes Projekt beschreiben (was willst Du genau haben - also nicht dieses kleine Detailproblem sondern was sozusagen das große Ziel ist) und ggf. auch Dein Projekt (so Du eines hast) teilweise oder ganz geben für direkte Anpassungen. Dann kann ich Dich ggf. zu einer direkten Lösung des eigentlichen Problems führen.
Und ggf. bräuchte ich für Tests bei mir ein paar Beispiel-Bilder - ich selbst habe diesbezüglich keine Bilder zur Hand und habe auch keine Digitalkamera oder so (Außer dem Smartphone).

Auf sowas könnte ich mich einlassen.
alles klar, bin altmodisch, 49 und bring mir halt alles selbst bei...es gibt nicht mehr details.
ich will einfach nur wieder mit getWidth() an die Breite eines hochkantbildes.... um es korrekt anzuzeigen, bei win7 war alles so easy, bild selbst gedreht und alles passte, hab nie was von metadaten gebraucht oder sowas.
ps. hab eine zip-datei von den "commons" geladen aber das checke ich nicht wie ich das im eclipse eingebunden bekomme...
versuch bei dir mal bei irgendeinem foto, kamera, händy, egal an die breite zu kommen mit getWidht()....
ansonsten weiß ich nicht was ich dir noch mailen soll,
vielen danke für deine mühe.
ich denk manchmal 5 minuten telefonieren sind viel schneller als stundenlanges tippen, wie gerade eben
Tino
 

dalco

Aktives Mitglied
Ich hab die Lösung....
hab die alte windows fotoanzeige geladen, damit drehe ich dann die Hochkantbilder wirklich auf hochkant und nun wird mit dem getWidth()
auch bei einem foto mit den maßen 5472 / 3648 auch wirklich wieder das 3648 als breite angezeigt.... schweins veraltet bestimmt, aber yippie
 

dalco

Aktives Mitglied
alles klar, bin altmodisch, 49 und bring mir halt alles selbst bei...es gibt nicht mehr details.
ich will einfach nur wieder mit getWidth() an die Breite eines hochkantbildes.... um es korrekt anzuzeigen, bei win7 war alles so easy, bild selbst gedreht und alles passte, hab nie was von metadaten gebraucht oder sowas.
ps. hab eine zip-datei von den "commons" geladen aber das checke ich nicht wie ich das im eclipse eingebunden bekomme...
versuch bei dir mal bei irgendeinem foto, kamera, händy, egal an die breite zu kommen mit getWidht()....
ansonsten weiß ich nicht was ich dir noch mailen soll,
vielen danke für deine mühe.
ich denk manchmal 5 minuten telefonieren sind viel schneller als stundenlanges tippen, wie gerade eben
Tino
danke dir nochmal, ich belasse es mal bei meinem alten fotodrehen und versuch mal deinen code zu verstehen
grüße
Tino
 

Ähnliche Java Themen

Neue Themen


Oben