| 40 | const TGS_MIME = 'application/x-tgsticker'; |
| 41 | const WEBM_MIME = 'video/webm'; |
| 42 | |
| 43 | // 通过文件头检测图片格式 |
| 44 | function detectImageMime(buffer: Buffer): string | null { |
| 45 | if (buffer.length < 4) return null; |
| 46 | |
| 47 | // JPEG: FF D8 FF |
| 48 | if (buffer[0] === 0xFF && buffer[1] === 0xD8 && buffer[2] === 0xFF) { |
| 49 | return 'image/jpeg'; |
| 50 | } |
| 51 | // PNG: 89 50 4E 47 |
| 52 | if (buffer[0] === 0x89 && buffer[1] === 0x50 && buffer[2] === 0x4E && buffer[3] === 0x47) { |
| 53 | return 'image/png'; |
| 54 | } |
| 55 | // GIF: 47 49 46 38 |
| 56 | if (buffer[0] === 0x47 && buffer[1] === 0x49 && buffer[2] === 0x46 && buffer[3] === 0x38) { |
| 57 | return 'image/gif'; |
| 58 | } |
| 59 | // WebP: 52 49 46 46 ... 57 45 42 50 |
| 60 | if (buffer[0] === 0x52 && buffer[1] === 0x49 && buffer[2] === 0x46 && buffer[3] === 0x46 && |
| 61 | buffer.length >= 12 && buffer[8] === 0x57 && buffer[9] === 0x45 && buffer[10] === 0x42 && buffer[11] === 0x50) { |
| 62 | return 'image/webp'; |
| 63 | } |
| 64 | return null; |
| 65 | } |
| 66 | |