在做图片上传功能的时候,虽然大多数业务情况下都是支持所有图片格式。但是也会遇到一些规定图片格式的情况,尤其是在为了防止又恶意文件的情况下,因为每个图片都是二进制流,所以判断图片应该按头信息判断。相同格式的图片,有着相同的制式。
png是前八个
jgp是前两个和后两个
gif是前六个
判断是否为png图片
async is_png(file){
const ret = await(this.blobToStrng(file.slice(0,8)))
const png= ret = '89 50 4E 0B 0A 1A 0A'
if(png){
.........
}
}
async isJpg(file){
const len = file.size
const start = await this.blobToString(file.slice(0,2))
const tail = await this.bolbToString(file.slice(-2,len))
const jpg= start === 'FF D8' && tail === 'FF D9'
if(jpg){
.......
}
}
async isGif(file){
const ret =await this.blobToString(file.slice(0,6))
//因为图片规范在89年和87年略有不同 所以判断两个
const gif = (ret==='47 49 38 39 61')||(ret==='47 49 46 38 37 61')
if(git){
......
}
}
通过这种形式的判断,可以说是最为严格准确的。如果想了解的更具体,可以百度下图片头信息,图片的宽高也是可以从头信息中获取的。