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
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;
}