Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.java > #12902

Java ImageIO; mal lahm, mal flott

From Peter <peter@localhost.com>
Newsgroups de.comp.lang.java
Subject Java ImageIO; mal lahm, mal flott
Date 2016-01-15 20:08 +0100
Organization Individual Network Berlin e.V.
Message-ID <1452884893.626603@alpaka.in-berlin.de> (permalink)

Show all headers | View raw


Hallo,

hier habe ich eine große Menge jpeg-Images (ca. 3k), von denen ich für
die Weiterverarbeitung ihre Größe benötige.
Der Helfer in allen Lebenslagen heißt stackoverflow, und da findet sich
folgende viel versprechende Lösung:

http://stackoverflow.com/questions/672916/how-to-get-image-height-and-width-using-java

"Here is something very simple and handy.

BufferedImage bimg = ImageIO.read(new File(filename));
int width          = bimg.getWidth();
int height         = bimg.getHeight();"

Funktioniert tatsächlich; hat nur einen schweren Nachteil:
Diese "Löschung" dauert eeeeeehhhhhhhhwig!
Ca. 10 Sekunden für ein Image!

Ich habe nämlich nicht nur viele Images, sie sind auch recht groß (8k x
8k); insgesamt ca. 50GB.

Wiedermal eine OO-Sternstunde: Es wird ein 10 Tonnen schweres Objekt
instanziiert, nur um es dann nach seine Größe zu fragen :-(

Aber wenn man bei obiger Website etwas nach unten scrollt, findet man
noch einen Vorschlag:

/**
 * Gets image dimensions for given file
 * @param imgFile image file
 * @return dimensions of image
 * @throws IOException if the file is not a known image
 */
public static Dimension getImageDimension(File imgFile) throws IOException {
  int pos = imgFile.getName().lastIndexOf(".");
  if (pos == -1)
    throw new IOException("No extension for file: " +
imgFile.getAbsolutePath());
  String suffix = imgFile.getName().substring(pos + 1);
  Iterator<ImageReader> iter = ImageIO.getImageReadersBySuffix(suffix);
  if (iter.hasNext()) {
    ImageReader reader = iter.next();
    try {
      ImageInputStream stream = new FileImageInputStream(imgFile);
      reader.setInput(stream);
      int width = reader.getWidth(reader.getMinIndex());
      int height = reader.getHeight(reader.getMinIndex());
      return new Dimension(width, height);
    } catch (IOException e) {
      log.warn("Error reading: " + imgFile.getAbsolutePath(), e);
    } finally {
      reader.dispose();
    }
  }

  throw new IOException("Not a known image file: " +
imgFile.getAbsolutePath());
}

Und siehe da, alles flutscht quasi in Nullzeit.

Noch weiter unten hat sich jemand gefunden, der die Performanz der
verschiedenen Ansätze miteinander verglichen hat; da lernt man, dass die
durchaus um den Faktor 200(!) auseinander liegen.

Vielleicht ist das auch der Grund, warum der Geoserver so grottenlahm ist...

Back to de.comp.lang.java | Previous | NextNext in thread | Find similar


Thread

Java ImageIO; mal lahm, mal flott Peter <peter@localhost.com> - 2016-01-15 20:08 +0100
  Re: Java ImageIO; mal lahm, mal flott Thomas Richter <thor@math.tu-berlin.de> - 2016-01-21 10:40 +0100

csiph-web