1、原理: 图片的编码格式在开头都有固定的标志位,转成字节数组之后可以根据标志位判断
2、代码:这里只写了 jpg/jpeg、png、gif 的判断方式,传入图片文件的字节数组指针和文件名,返回错误就是不匹配
func CheckImageCode(b *[]byte, filename string) error {
split := strings.Split(filename, ".")
suffix := split[len(split)-1]
suffix = strings.ToLower(suffix)
switch suffix {
case "jpg", "jpeg":
if (*b)[0] != 0xff || (*b)[1] != 0xd8 {
return fmt.Errorf("jpg/jpeg 图片编码与后缀名不匹配")
}
case "png":
if (*b)[0] != 0x89 || (*b)[1] != 0x50 ||
(*b)[2] != 0x4E || (*b)[3] != 0x47 ||
(*b)[4] != 0x0D || (*b)[5] != 0x0A ||
(*b)[6] != 0x1A {
return fmt.Errorf("png 图片编码与后缀名不匹配")
}
case "gif":
if (*b)[0] != 0x47 || (*b)[1] != 0x49 || (*b)[2] != 0x46 {
return fmt.Errorf("gif 图片编码与后缀名不匹配")
}
}
return nil
}