Skip to content

Instantly share code, notes, and snippets.

@erdesigns-eu
Created December 2, 2024 13:40
Show Gist options
  • Save erdesigns-eu/2d382916537dd2b81e87fdd84ba964e8 to your computer and use it in GitHub Desktop.
Save erdesigns-eu/2d382916537dd2b81e87fdd84ba964e8 to your computer and use it in GitHub Desktop.
Get the image type from a buffer
/**
* Get the type of an image.
* @param image The image as a buffer.
* @returns The type of the image.
*/
export function getImageType(image: Buffer): Promise<{ mimeType: string, extension: string }> {
return new Promise((resolve, reject) => {
if (image[0] === 0xFF && image[1] === 0xD8 && image[2] === 0xFF) {
resolve({
mimeType: 'image/jpeg',
extension: 'jpg',
});
}
else if (image[0] === 0x89 && image[1] === 0x50 && image[2] === 0x4E && image[3] === 0x47) {
resolve({
mimeType: 'image/png',
extension: 'png',
});
}
else if (image[0] === 0x47 && image[1] === 0x49 && image[2] === 0x46 && image[3] === 0x38) {
resolve({
mimeType: 'image/gif',
extension: 'gif',
});
}
else if (image[0] === 0x42 && image[1] === 0x4D) {
resolve({
mimeType: 'image/bmp',
extension: 'bmp',
});
}
else if (image[0] === 0x52 && image[1] === 0x49 && image[2] === 0x46 && image[3] === 0x46 && image[8] === 0x57 && image[9] === 0x45 && image[10] === 0x42 && image[11] === 0x50) {
resolve({
mimeType: 'image/webp',
extension: 'webp',
});
}
else {
reject(Error('Unsupported image type.'));
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment