目前大部分安卓手机相机设置中有这么一项(HEIF格式),打开后拍出来的照片就是heic/heif格式,比jpg和png更加节省储存空间,但是这种格式的照片上传到文件服务器后,部分手机浏览器无法显示,电脑浏览器则正常,所以需要前端上传前做转码处理。
于是到网上找了个第三方js库heic2any(https://github.com/alexcorvi/heic2any)来做转格式的工作,调试了半天,出现以下报错:
以下是方法代码
import heic2any from "heic2any";
/**
* @description: heic格式图片base64转blob,再转png格式
* @author: Tan
* @return {*}
* @param {*} fileName
* @param {*} base64
*/
const heic2jpt = (fileName, base64) => {
return new Promise((resolve, reject) => {
let data = atob(base64.split(',')[1]);
let n = data.length;
let u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = data.charCodeAt(n);
}
let blob = new Blob([u8arr]);
console.log('blob',data.length,blob)
heic2any({
blob,
toType: "image/png"
}).then((conversionResult) => { // conversionResult is a BLOB
resolve(blobToFile(conversionResult, fileName))
})
.catch((e) => {
console.error('error',e)
});
})
}
对比了文档例子只有是从网上下载的二进制流来转jpg,这里直接用van-uploader本地获取的图片文件的二进制流放进去转格式则会报错,我查了一下是LIBHEIF是解码器不支持当前格式
所以目前还没找到解决方案,最后得出的结论是上传文件后让后端进行转码罒ω罒。
欢迎有遇到过这个问题,或者知道怎么解决的大神留言。