Использование 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.

Другие вопросы по тегам