前几天遇到一个问题,前端上传的图片都为webp格式,但有些是动图,有些不是动图
由于它们的后缀都是.webp,无法通过判断后缀来解决,于是通过读取二进制流来判断是否为动图。
如图,经过测试发现,读取动图webp二进制流,前两行会包含一个 ANIM
字符串。否则则为静态,静态图片的二进制流前两行也会包含一个字符串 ALPH
代码解决:
public Integer uploadPicture(MultipartFile multipartFileImageFile) throws IOException {
// 定义动图标记,1表示动图
Integer animated = 0;
BufferedReader br;
String line;
InputStream is = multipartFileImageFile.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
// 二进制流有很多行,我们只需要读取前两行就可以判断
int count = 0;
while ((line = br.readLine()) != null) {
// 为保险起见,我们读取5行,如果其中包含"ANIM"则为动图
if (line.contains("ANIM")) {
animated = 1;
}
if (count++ >= 5) {
break;
}
}
return animated;
}
搞定,小伙伴们如果有更好的办法可以评论。