我是靠谱客的博主 妩媚发箍,最近开发中收集的这篇文章主要介绍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

最后

以上就是妩媚发箍为你收集整理的javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49的全部内容,希望文章能够帮你解决javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部