Вы также можете определить тип изображения без , полагаясь на расширение пути с помощью CGImageSource (часть инфраструктуры ImageIO).
В следующем примере используется URL-адрес файла, но вы также можете создать источник изображения из CFDataRef.
CFStringRef typeOfImageAtURL(NSURL *imageURL) {
const void * keys[] = { kCGImageSourceShouldCache };
const void * values[] = { kCFBooleanFalse };
CFDictionaryRef options = CFDictionaryCreate(kCFAllocatorDefault, keys, values, 1, NULL, NULL);
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)imageURL, options);
CFStringRef imageType = CGImageSourceGetType(imageSource);
CFRelease(options);
CFRelease(imageSource);
return imageType;
}
Возвращаемое значение будет константой, которую можно сравнить со значениями идентификатора унифицированного типа, объявленными в CoreServices / MobileCoreServices (например, kUTTypeJPEG, kUTTypeGIF и т. Д.).
Глазурь на торте: вы можете передать необязательный UTI с «подсказкой», если у вас есть причина ожидать тот или иной тип файла.Комбинируйте этот подход с Bavarious ', и вы получите компактную машину для определения среднего формата изображения.