@@ 8,6 8,7 @@
 #include <png.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 
 #define BUFFER_LENGTH 4
 
@@ 231,24 232,32 @@ image_error_t image_deduce_type(image_t *image) {
     return image_error_from_errno();
   }
 
-  uint8_t data[BUFFER_LENGTH];
-  if (fread(data, 1, BUFFER_LENGTH, file) != BUFFER_LENGTH) {
-    fclose(file);
-    return IMERR_UNKNOWN;
-  }
+  magic_t magic = magic_open(MAGIC_MIME_TYPE);
+  magic_load(magic, NULL);
 
-  fclose(file);
+  const char *mime = magic_file(magic, image->path);
 
-  if (data[0] == 0xFF && data[1] == 0xD8 && data[2] == 0xFF) {
+  if (strstr(mime, "jpeg") != NULL || strstr(mime, "jpg") != NULL) {
     image->type = IMG_JPG;
-  } else if (data[0] == 0x89 && data[1] == 0x50 && data[2] == 0x4E &&
-             data[3] == 0x47) {
+  } else if (strstr(mime, "image/png") != NULL) {
     image->type = IMG_PNG;
-  } else if (data[0] == 'P' && data[1] == '6') {
-    image->type = IMG_PPM;
   } else {
-    return IMERR_UNKNOWN_FORMAT;
+    uint8_t data[BUFFER_LENGTH];
+    if (fread(data, 1, BUFFER_LENGTH, file) != BUFFER_LENGTH) {
+      fclose(file);
+      return IMERR_UNKNOWN;
+    }
+
+    fclose(file);
+
+    if (data[0] == 'P' && data[1] == '6') {
+      image->type = IMG_PPM;
+    } else {
+      magic_close(magic);
+      return IMERR_UNKNOWN_FORMAT;
+    }
   }
 
+  magic_close(magic);
   return IMERR_SUCCESS;
 }