欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

java not a jpeg file_javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49

发布时间:2025/3/12 编程问答 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java not a jpeg file_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文件十六进制内容

可参看链接

总结

以上是生活随笔为你收集整理的java not a jpeg file_javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。