简介
最近项目中遇到一个图片解析的问题,heic格式的图片被用户强制修改扩展名为jpg,客户端当作jpg上传,导致web端解析不出来。
引用
HEIC格式的图片是iOS11中把原先的录像和照片的H.264和jpg格式,替换成HEVC和HEIF。这种方法不但省内存而且画质原原本本的保留下来了。而且在苹果WWDC发布会说明过,未来的iOS版本中,图片都将采用HEIC格式。
解决
为了适应跨平台性,IOS端应该将heic格式文件转成常见文件格式,Android端有些系统做了兼容可以识别,但是web端不能识别。
针对用户自行修改后缀导致web显示不正常的问题,我们传图片之前对heic格式进行一下压缩就变成普通图片格式。
在上传图片之前判断一下图片的真实类型,选择性的进行压缩heic格式的图片,而怎么获取文件 MIME 类型,就变成了一个问题。网上普遍都是判断文件扩展类型的方式。
方案
Apache Tika是一个工具集,可以从各种文件中检测和提取元数据和文本。它具有丰富而强大的 API,并带有我们可以使用的tika-core,用于检测文件的 MIME 类型。
//修改后缀之后的heic图片
File file = new File("heic.jpg");
Tika tika = new Tika();
String mimeType = tika.detect(file);
//image/heic
注意:1.23的版本才支持heic检测
Java
Maven配置:
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.28</version>
</dependency>
Android
直接下载jar依赖到工程中:
jar包依赖