ImageIO读jpg的时候出现exception:bandOffsets.length is wrong,我的解决方法

本文介绍了一种解决Java中使用ImageIO读取损坏的JPEG图片时出现的异常问题的方法。当JPEG图片的ICC信息被破坏导致ImageIO无法正常工作时,可以采用ThumbnailConvert工具结合ImageMagick将CMYK颜色空间转换为RGB来解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值