Java图片处理的坑:披着羊皮的狼,图片格式不能只根据后来判断
程序员文章站
2022-03-10 21:57:02
...
最近在做图片处理时,写的图片处理simpleImageTool小库,在应用时发现有的图片后缀名是不对应的,比如实际文件是gif,文件名却是png。导致处理异常,为了避免出现这种情况,就需要对文件流进行文件类型判断。我是对文件开头的标识来判断才得以解决。
protected static int read(InputStream in) {
int curByte = 0;
try {
curByte = in.read();
} catch (IOException e) {
// status = STATUS_FORMAT_ERROR;
}
return curByte;
}
public static boolean isGif(BufferedInputStream in){
String type = "";
in.mark(6);
for (int i = 0; i < 6; i++) {
type += (char) read(in);
}
try {
in.reset();
} catch (IOException e) {
e.printStackTrace();
}
return type.startsWith("GIF");
}
对InputStream的流必须在包一层BufferedInputStream 才具备mark标记和reset功能,否则对inputStrean做了类型判断,第二次读取进行图片处理会出错,根据源码跟踪发现InputStream
public synchronized void mark(int readlimit) {}
没干事。
BufferedInputStream中进行了实现:
public synchronized void mark(int readlimit) {
marklimit = readlimit;
markpos = pos;
}
最终包一层就得以解决第二次读取问题。下一篇: windows电脑c盘突然满了怎么办