imageIO异常:Unsupported Image T…

是不是在使用iamgeio导入图片的时候出现了这个异常呢:

javax.imageio.IIOException: Unsupported Image Type


如果你确定图片格式没有错,那我想你可能使用过photoshop了。

谁说理科男没有艺术细胞的,我每次敲代码导入的图片都是自己PS....


言归正传。P过的图片保存为jpg格式时,默认的模式是CMYK模式(注意,这是给印刷机用的)。在图像-->模式中改为RGB模式才是显示器用的。试试吧,good luck~~【JAVA】imageio异常:不支持图像类型




场景:ImageIO读jpg的时分出现javax.imageio.IIOException: Unsupported Image Type

ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type
用java处理图片的时候,ImageIO读jpg的时候出现exception:bandOffsets.length is wrong。我也遇到过,最终也解决啦,把成果跟大家分享。 

原因可能是JPEG图片的ICC信息可能已经被破坏了,所以ImageIO会抛出异常 

解决办法: 

BufferedImage bis = null; 
   try{ 
       bis = ImageIO.read(file); 
       bis.getWidth(); 
       bis.getHeight(); 
   }catch(Exception e){ 
    try 
   
     ThumbnailConvert tc = new ThumbnailConvert(); 
     tc.setCMYK_COMMAND(file.getPath()); 
     Image image =null; 
     image = Toolkit.getDefaultToolkit().getImage(file.getPath()); 
       MediaTracker mediaTracker = new MediaTracker(new Container()); 
     mediaTracker.addImage(image, 0); 
     mediaTracker.waitForID(0); 
      image.getWidth(null); 
     image.getHeight(null); 
    }catch (Exception e1){ 
     e1.printStackTrace(); 
   
  

这两句代码,是处理cmyk类型的图片,需要ImageMagick的支持 

ThumbnailConvert tc = new ThumbnailConvert(); 
     tc.setCMYK_COMMAND(file.getPath());//用于把cmyk转成rgb 

ImageMagick的具体指令是:mogrify -colorspace RGB -quality 100 file1


ThumbnailConvert.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;   
}   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值