Utilizziamo Java2D per ridimensionare le foto caricate sul nostro sito Web, ma ci imbattiamo in un problema (apparentemente vecchio, cf .: http://forums.sun.com/thread.jspa?threadID=5425569) - alcuni file JPEG specifici sollevano uno CMMException
quando proviamo a ImageIO.read()
un InputStream contenente i loro dati binari :Esiste un'alternativa Java al 100% a ImageIO per la lettura di file JPEG?
java.awt.color.CMMException: Invalid image format
at sun.awt.color.CMM.checkStatus(CMM.java:131)
at sun.awt.color.ICC_Transform.<init>(ICC_Transform.java:89)
at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:516)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1114)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1082)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:897)
at javax.imageio.ImageIO.read(ImageIO.java:1422)
at javax.imageio.ImageIO.read(ImageIO.java:1326)
...
(stato tagliato il resto della traccia dello stack, che è il nostro ImageIO.read()
chiamata, il codice del servlet e simili)
Abbiamo ristretto verso il basso per le foto scattate con fotocamere specifici, e ho scelto una foto che trigger questo errore: http://img214.imageshack.us/img214/5121/estacaosp.jpg. Abbiamo notato che questo succede solo con JVM di Sun (su Linux e Mac, appena testato su 1.6.0_20) - una macchina di prova con OpenJDK legge le stesse foto senza intoppi, probabilmente a causa di una diversa implementazione del lettore JPEG.
Purtroppo, non siamo in grado di passare JVM in produzione, né di utilizzare soluzioni native-native come ImageMagick (http://www.imagemagick.org/).
Considerando ciò, la mia domanda è: esiste una sostituzione per il lettore JPEG di ImageIO in grado di gestire foto come quella collegata? In caso contrario, esiste un'altra soluzione di ridimensionamento delle foto Java al 100% che possiamo utilizzare?
Grazie!
A proposito, sono consapevole che ImageIO non elabora le immagini CMYK (come per http://stackoverflow.com/questions/2408613/problem-reading-jpeg-image-using-imageio-readfile-file).Ma quello campione è RGB (per quanto riguarda l'anteprima di Mac, sarebbe contento se qualcuno potrebbe confermarlo) – chesterbr
Ho aperto un bug nel database degli errori Oracle/Sun qui: http://bugs.sun.com/bugdatabase /view_bug.do?bug_id=7064516 Vota per questo se sei ancora interessato alla correzione! –