package sniff // ref: https://mimesniff.spec.whatwg.org var imageMIMEs = map[string]Sniffer{ "image/jpeg": prefixSniffer{0xFF, 0xD8, 0xFF}, "image/png": prefixSniffer{'P', 'N', 'G', '\r', '\n', 0x1A, '\n'}, "image/bmp": prefixSniffer("BM"), "image/webp": prefixSniffer("RIFF"), "image/gif": prefixSniffer("GIF8"), } // ImageMIME sniffs the well-known image types, and returns its MIME. func ImageMIME(header []byte) (string, bool) { for ext, sniffer := range imageMIMEs { if sniffer.Sniff(header) { return ext, true } } return "", false } // ImageExtension is equivalent to ImageMIME, but returns file extension func ImageExtension(header []byte) (string, bool) { ext, ok := ImageMIME(header) if !ok { return "", false } // todo: use mime.ExtensionsByType return "." + ext[6:], true // "image/" is 6 bytes }