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

}