Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Problema con Unsupported Image Type

    ciao!

    ho un problema con delle immagini JPG da processare.
    in sostanza ho questo metodo al quale passo varie immagini:
    codice:
        public void resizeImage(String inputImage, String dir, int width, int height) throws IOException {
            File f = new File(inputImage);
            Image image = ImageIO.read(f);
            Image newImage = image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
            BufferedImage buf = new BufferedImage(newImage.getWidth(null), newImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
            Graphics2D g2 = buf.createGraphics();
            g2.drawImage(newImage, 0, 0, null);
            g2.dispose();
            String ext = FilenameUtils.getExtension(f.getName());
            ImageIO.write(buf, ext, new File(dir + f.getName()));
        }
    su alcune immagini JPG (NON corrotte, e perfettamente visibili), ottengo questo errore:
    codice:
    javax.imageio.IIOException: Unsupported Image Type
        at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1068)
        at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1039)
        at javax.imageio.ImageIO.read(ImageIO.java:1448)
        at javax.imageio.ImageIO.read(ImageIO.java:1308)
        at com.mp.resize.ImageResize.resizeImage(ImageResize.java:29)
        at com.mp.resize.StartResizing.lambda$run$0(StartResizing.java:45)
        at com.mp.resize.StartResizing$$Lambda$23/457233649.accept(Unknown Source)
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
        at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
        at com.mp.resize.StartResizing.run(StartResizing.java:43)
        at java.lang.Thread.run(Thread.java:745)
    mi pare di aver capito che il problema può essere la differenza tra RGB e CMYK.
    se fosse così, o un problema simile, come potrei risolvere??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    mi pare di aver capito che il problema può essere la differenza tra RGB e CMYK.
    se fosse così, o un problema simile, come potrei risolvere??
    Prova a leggere qui: http://stackoverflow.com/questions/5...yk-color-space

    Il problema è noto, nel senso che il trattamento di immagini in CMYK è più "critico".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ciao andbin.

    partendo dal tui link sono arrivato qui: http://stackoverflow.com/questions/8...32556#12132556

    da qui la cosa sembra ben più complicata

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    da qui la cosa sembra ben più complicata
    Sì .. è vero. Il CMYK purtroppo è "complicato".

    Comunque la API ImageIO è "pluggabile", quindi basta trovare una libreria di plugin che supporti JPEG in CMYK. Girando un po' in rete ho rivisto un nome che ricordavo di aver già letto: la libreria TwelveMonkeys, https://github.com/haraldk/TwelveMonkeys

    Nella lista delle feature cita i JPEG in CMYK. Ed è anche aggiornata (l'ultima release è di un mese fa!). Direi che si può provarla ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    allora, sto provando a guardare in giro ma c'è qualcosa che mi manca.
    per ora sto provando con questa libreria, che mi sembra faccia la stessa cosa: http://www.randelshofer.ch/monte/ (in fondo JPEG CMYK Demo).
    ho cambiato così (da sistemare ovviamente):
    codice:
        public void resizeImage(String inputImage, String dir, int width, int height) {
            File f = new File(inputImage);
            try {
                Image image = ImageIO.read(f);
                Image newImage = image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
                BufferedImage buf = new BufferedImage(newImage.getWidth(null), newImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
                Graphics2D g2 = buf.createGraphics();
                g2.drawImage(newImage, 0, 0, null);
                g2.dispose();
                String ext = FilenameUtils.getExtension(f.getName());
                ImageIO.write(buf, ext, new File(dir + f.getName()));
            } catch (IOException ex) {
                if (ex.getMessage().equals("Unsupported Image Type")) {
                    try {
                        BufferedImage img = null;
                        try (ImageInputStream iis = new FileImageInputStream(f)) {
                            CMYKJPEGImageReader r = new CMYKJPEGImageReader(new CMYKJPEGImageReaderSpi());
                            r.setInput(iis);
                            img = r.read(0);
                        }
                        System.out.println("ok");
                    } catch (IOException ex1) {
                        System.out.println(ex1.getMessage());
                    }
                }
            }
        }
    per ora, intercetto l'evento Unsupported Image Type, e in quel caso devo mandare in esecuzione la lettura del file CMYK.
    ma qua mi perdo.
    probabilmente in maniera stupida, ma è che per fare il riszing di file RGB, nel try, uso:
    codice:
    Image image = ImageIO.read(f);
    Image newImage = image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
    BufferedImage buf = new BufferedImage(newImage.getWidth(null), newImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
    ..............
    il mio problema è che non riesco a trovare una maniera per usare getScaledInstance nel caso di CMYK.
    ho provato a vedere in giro, ma non ho trovato esempi del mio caso.
    qualche idea?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.