ImageIOがjpgを読んでいるとjavax.imago.IIOException:Unisupported Image Typeが出ます。

2040 ワード

javaで画像を処理する時、ImageIOがjpgを読む時exceptionが現れます。bandOffsets.length is wrong。私も会ったことがあります。最終的に解決しました。成果を皆さんに分かち合います。
JPEGピクチャのICC情報が破壊された可能性がありますので、ImageIOは異常を投げます。
解決策:
BufferedImage bis=null;
   try{
       bis=ImageIO.read;
       bis.get Width()
       bis.get Height()
   }catch(Exception e){
    try
    {
     Thumbnail Convert tc=new Thumbnal Convert()
     tc.setCMYKuCOMMAND(file.getPath();
     Imageイメージ=null;
     イメージ=Toolkit.get Default Toolkit().getImage(file.getPath();
       Media Tracker media Tracker=new Media Tracker(new Conttainer);
     media Tracker.addImage(イメージ、0)
     media Tracker.waitForID(0)
      image.get Width(null)
     イメージ.get Height(null)
    }catch(Exception e 1){
     e 1.print StockTrace()
    }
   }
この二つのコードは、cmykタイプの画像を処理するために、ImageMagickのサポートが必要です。
Thumbnail Convert tc=new Thumbnal Convert()
     tc.setCMYKuCOMMAND(file.getPath)//cmykをrgbに変換するために使用されます。
ImageMagickの具体的な指令は、mogrify-colorspace RGB-quality 100 file 1です。
Thumbnail Convert.java

private String CMYK_COMMAND = "mogrify -colorspace RGB -quality 80 file1";//  cmyk     
  
public void setCMYK_COMMAND(String file1) {   
exeCommand(CMYK_COMMAND.replace("file1", file1));   
}   
  
public boolean exeCommand(String cmd){   
InputStreamReader ir = null;   
LineNumberReader input = null;   
try   
{   
//linux java    :Runtime.getRuntime().exec (String str);   
Process process = Runtime.getRuntime().exec (cmd);   
ir=new InputStreamReader(process.getInputStream());   
input = new LineNumberReader (ir);   
while ((input.readLine ()) != null){   
}   
ir.close();   
input.close();   
}   
catch (java.io.IOException e){   
System.err.println ("IOException " + e.getMessage());   
return false;   
}   
return true;   
}