Используя UTIs для идентификации файлов образа
Q: Как я могу использовать Универсальные Идентификаторы типов (UTIs), чтобы определить, является ли данный путь к файлу файлом образа?
A: Как я могу использовать Универсальные Идентификаторы типов (UTIs), чтобы определить, является ли данный путь к файлу файлом образа?
Можно определить, является ли данный файл, на основе его пути к файлу, файлом образа путем сравнения его UTI через платформу Launch Services с поддерживаемым UTIs от Изображения платформа I/O.
Перечисление 1 , Определяющее, является ли путь к файлу файлом образа.
- (BOOL)isImageFile:(NSString*)filePath
{
BOOL isImageFile = NO;
FSRef fileRef;
Boolean isDirectory;
if (FSPathMakeRef((const UInt8 *)[filePath fileSystemRepresentation], &fileRef, &isDirectory) == noErr)
{
// get the content type (UTI) of this file
CFDictionaryRef values = NULL;
CFStringRef attrs[1] = { kLSItemContentType };
CFArrayRef attrNames = CFArrayCreate(NULL, (const void **)attrs, 1, NULL);
if (LSCopyItemAttributes(&fileRef, kLSRolesViewer, attrNames, &values) == noErr)
{
// verify that this is a file that the Image I/O framework supports
if (values != NULL)
{
CFTypeRef uti = CFDictionaryGetValue(values, kLSItemContentType);
if (uti != NULL)
{
CFArrayRef supportedTypes = CGImageSourceCopyTypeIdentifiers();
CFIndex i, typeCount = CFArrayGetCount(supportedTypes);
for (i = 0; i < typeCount; i++)
{
CFStringRef supportedUTI = CFArrayGetValueAtIndex(supportedTypes, i);
// make sure the supported UTI conforms only to "public.image" (this will skip PDF)
if (UTTypeConformsTo(supportedUTI, CFSTR("public.image")))
{
if (UTTypeConformsTo(uti, supportedUTI))
{
isImageFile = YES;
break;
}
}
}
CFRelease(supportedTypes);
}
CFRelease(values);
}
}
CFRelease(attrNames);
}
return isImageFile;
} |
Если Вы требуете другого UTIs, не связанного с файлами образа или ImageIO, вместо CGImageSourceCopyTypeIdentifiers() можно использовать следующий -
CFArrayRef UTICreateAllIdentifiersForTag(CFStringRef inTagClass, CFStringRef inTag, CFStringRef inConfirmingToUTI);
Связанная документация
История версии документа
| Дата | Примечания |
|---|---|
| 11.05.2007 | Новый документ, объясняющий, как использовать Универсальные Идентификаторы типов для идентификации, какие файлы могут быть открыты в изображениях. |