1package matchers 2 3var ( 4 TypeJpeg = newType("jpg", "image/jpeg") 5 TypePng = newType("png", "image/png") 6 TypeGif = newType("gif", "image/gif") 7 TypeWebp = newType("webp", "image/webp") 8 TypeCR2 = newType("cr2", "image/x-canon-cr2") 9 TypeTiff = newType("tif", "image/tiff") 10 TypeBmp = newType("bmp", "image/bmp") 11 TypeJxr = newType("jxr", "image/vnd.ms-photo") 12 TypePsd = newType("psd", "image/vnd.adobe.photoshop") 13 TypeIco = newType("ico", "image/x-icon") 14) 15 16var Image = Map{ 17 TypeJpeg: Jpeg, 18 TypePng: Png, 19 TypeGif: Gif, 20 TypeWebp: Webp, 21 TypeCR2: CR2, 22 TypeTiff: Tiff, 23 TypeBmp: Bmp, 24 TypeJxr: Jxr, 25 TypePsd: Psd, 26 TypeIco: Ico, 27} 28 29func Jpeg(buf []byte) bool { 30 return len(buf) > 2 && 31 buf[0] == 0xFF && 32 buf[1] == 0xD8 && 33 buf[2] == 0xFF 34} 35 36func Png(buf []byte) bool { 37 return len(buf) > 3 && 38 buf[0] == 0x89 && buf[1] == 0x50 && 39 buf[2] == 0x4E && buf[3] == 0x47 40} 41 42func Gif(buf []byte) bool { 43 return len(buf) > 2 && 44 buf[0] == 0x47 && buf[1] == 0x49 && buf[2] == 0x46 45} 46 47func Webp(buf []byte) bool { 48 return len(buf) > 11 && 49 buf[8] == 0x57 && buf[9] == 0x45 && 50 buf[10] == 0x42 && buf[11] == 0x50 51} 52 53func CR2(buf []byte) bool { 54 return len(buf) > 9 && 55 ((buf[0] == 0x49 && buf[1] == 0x49 && buf[2] == 0x2A && buf[3] == 0x0) || 56 (buf[0] == 0x4D && buf[1] == 0x4D && buf[2] == 0x0 && buf[3] == 0x2A)) && 57 buf[8] == 0x43 && buf[9] == 0x52 58} 59 60func Tiff(buf []byte) bool { 61 return len(buf) > 3 && 62 ((buf[0] == 0x49 && buf[1] == 0x49 && buf[2] == 0x2A && buf[3] == 0x0) || 63 (buf[0] == 0x4D && buf[1] == 0x4D && buf[2] == 0x0 && buf[3] == 0x2A)) 64} 65 66func Bmp(buf []byte) bool { 67 return len(buf) > 1 && 68 buf[0] == 0x42 && 69 buf[1] == 0x4D 70} 71 72func Jxr(buf []byte) bool { 73 return len(buf) > 2 && 74 buf[0] == 0x49 && 75 buf[1] == 0x49 && 76 buf[2] == 0xBC 77} 78 79func Psd(buf []byte) bool { 80 return len(buf) > 3 && 81 buf[0] == 0x38 && buf[1] == 0x42 && 82 buf[2] == 0x50 && buf[3] == 0x53 83} 84 85func Ico(buf []byte) bool { 86 return len(buf) > 3 && 87 buf[0] == 0x00 && buf[1] == 0x00 && 88 buf[2] == 0x01 && buf[3] == 0x00 89} 90