Использование CGImageProperties для получения свойств EXIF
Я хочу иметь возможность добавлять текстовые комментарии к метаданным JPEG-файла и читать его из приложения iphone.
Я думал, что это будет довольно просто, так как ios4 содержит поддержку информации EXIF. Поэтому я добавил метаданные с помощью инструмента Windows, который называется used AnalogExif, и прочитал их из моего приложения, используя:
NSData *jpeg = UIImageJPEGRepresentation(myUIImage,1.0);
CGImageSourceRef source = CGImageSourceCreateWithData((CFDataRef)jpeg, NULL);
NSDictionary *metadata = (NSDictionary *) CGImageSourceCopyPropertiesAtIndex(source,0,NULL);
NSMutableDictionary *metadataAsMutable = [[metadata mutableCopy]autorelease];
[metadata release];
NSMutableDictionary *EXIFDictionary = [[[metadataAsMutable objectForKey:(NSString *)kCGImagePropertyExifDictionary]
И это работает... в точку:)
В словаре метаданных я получаю что-то вроде:
(gdb) po metadata
{
ColorModel = RGB;
Depth = 8;
Orientation = 1;
PixelHeight = 390;
PixelWidth = 380;
"{Exif}" = {
ColorSpace = 1;
PixelXDimension = 380;
PixelYDimension = 390;
};
"{JFIF}" = {
DensityUnit = 0;
JFIFVersion = (
1,
1
);
XDensity = 1;
YDensity = 1;
};
"{TIFF}" = {
Orientation = 1;
};
}
Но это все, что я могу получить! Я редактировал файл JPEG с помощью каждого редактора EXIF, который я могу найти (в основном это ПК), и хотя все они говорят, что я добавил комментарии JPEG, подписи и ключевые слова EXIF, похоже, что эта информация недоступна в Apple SDK в моем приложении.
Кому-нибудь удалось установить текстовое поле в метаданных jpeg и прочитать его обратно из приложения iphone?
Я не хотел использовать стороннюю библиотеку, если это вообще возможно
Спасибо заранее
1 ответ
Вы правы, считая, что iOS поддерживает больше метаданных, чем то, что вы видите. Вы, вероятно, потеряли данные при создании UIImage
а затем преобразовал его обратно в JPEG. Пытаться NSData *jpeg = [NSData dataWithContentsOfFile:@"foo.jpg"]
и вы должны увидеть EXIF.