javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49

java处理图片时出现异常

javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImageHeader(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readNativeHeader(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.gotoImage(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readHeader(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.getWidth(Unknown Source)
at com.test.filedownloader.ImageHandler.getImageDim(ImageHandler.java:60)
at com.test.filedownloader.ImageHandler.main(ImageHandler.java:96)
Exception in thread "main" java.lang.NullPointerException
at com.test.filedownloader.ImageHandler.getImageDim(ImageHandler.java:70)
at com.test.filedownloader.ImageHandler.main(ImageHandler.java:96)

出现这种错误是因为将gif 图片后缀改成了jpg

解决办法:

根据文件的前面几个字节,判断文件类型

	private String getFileSuffix(final String path) throws IOException {
		String result = "";
		String hex="";
		if (path != null) {
			File image=new File(path);
			InputStream is = new FileInputStream(image);
			byte[] bt = new byte[2];  
			is.read(bt); 
			MyLog.logger.info(bt+"\n"+bytesToHexString(bt));  
			hex=bytesToHexString(bt);
			is.close();
			if(hex.equals("ffd8")){
				result="jpg";
			}else if(hex.equals("4749")){
				result="gif";
			}else if(hex.equals("8950")){
				result="png";
			}
		}
		
		return result;
	}


	public static String bytesToHexString(byte[] src) {  
        StringBuilder stringBuilder = new StringBuilder();  
        if (src == null || src.length <= 0) {  
            return null;  
        }  
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;  
            String hv = Integer.toHexString(v);  
            if (hv.length() < 2) {  
                stringBuilder.append(0);  
            }  
            stringBuilder.append(hv);  
        }  
        return stringBuilder.toString();  
    }

调用的话就

String suffix = getFileSuffix(path);

一个png文件十六进制内容



可参看链接

http://www.acgist.com/article/134.html

http://blog.csdn.net/fenglibing/article/details/7728275

http://www.cnblogs.com/Wendy_Yu/archive/2011/12/27/2303118.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
javax.imageio.iioexception: unsupported image type是Java图像输入输出异常的一种,表示不支持或不识别的图像类型。 在Java中,javax.imageio包提供了许多用于读取、写入和操作图像的类和接口。当使用该包中的类进行图像操作时,如果遇到不支持或不识别的图像类型,就会抛出javax.imageio.iioexception: unsupported image type异常。 造成这个异常的原因可能有以下几种情况: 1. 图片格式不受支持:Java的图像处理库支持许多常见的图片格式,如JPEG、PNG、GIF等。如果使用的图片格式不在支持列表中,就会抛出该异常。 2. 图片文件内容损坏:有时候由于网络传输、存储介质损坏或其他原因,图片文件的内容会发生损坏。如果图片文件的内容损坏,读取时就会抛出该异常。 3. 图片文件扩展名错误:某些情况下,Java的图像处理库根据文件的扩展名猜测图片的格式。如果文件扩展名与实际图片格式不匹配,也会导致该异常的发生。 解决javax.imageio.iioexception: unsupported image type异常的方法有: 1. 使用支持的格式:确认所处理的图片格式是Java图像处理库支持的,如果不是,则需将其转换为支持的格式再进行处理。 2. 检查图片文件:检查图片文件是否存在并且没有损坏。可以尝试打开图片文件并查看是否能正常显示。 3. 确认文件扩展名:确保文件的扩展名与实际的图片格式匹配。在加载图片时,可以指定图片的格式,而不依赖于文件扩展名。 总之,javax.imageio.iioexception: unsupported image type异常通常是由不支持或不识别的图像类型引起的。通过检查图片格式、文件内容和文件扩展名等方面的问题,可以解决该异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值