Использование CGImageProperties для получения свойств EXIF - PullRequest
5 голосов
/ 29 сентября 2011

Я хочу иметь возможность добавлять текстовый комментарий к метаданным 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 Ответ

4 голосов
/ 30 сентября 2011

Вы правы, считая, что iOS поддерживает больше метаданных, чем то, что вы видите. Вы, вероятно, потеряли данные, когда создали UIImage, а затем преобразовали его обратно в JPEG. Попробуйте NSData *jpeg = [NSData dataWithContentsOfFile:@"foo.jpg"], и вы должны увидеть EXIF.

...