在iPhone上对照片进行地理标记?

时间:2009-09-28 00:28:46

标签: iphone objective-c cocoa-touch

非常感谢链接或一些代码!

我有一个可让用户拍照的应用。这是我用来创建jpeg文件的代码。

如果假设参数信息有一个纬度和经度,我怎样才能在照片的EXIF数据中添加地理标记?

- (void) saveImage:(NSDictionary*) info {

  NSFileManager *fileManager = [NSFileManager defaultManager];

  NSString *filePath = [self applicationDocumentsDirectory] 
    stringByAppendingString: @"/photos/"];
  [fileManager createDirectoryAtPath: filePath withIntermediateDirectories: NO attributes: nil error: nil];

  filePath = [filePath stringByAppendingString: [info objectForKey: @"title"]];
  filePath = [filePath stringByAppendingString: @".jpg"];
  [fileManager createFileAtPath:filePath contents:nil attributes:nil];  
  NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];

  NSData * imgData = [[NSData alloc] initWithData: 
    UIImageJPEGRepresentation([info objectForKey: @"image"],.8)];

  [fileHandle writeData:imgData];
  [fileHandle closeFile];   
  [imgData release];

}

2 个答案:

答案 0 :(得分:2)

iPhone照片会自动在JPEG EXIF中进行地理标记

答案 1 :(得分:1)

iPhone目前不提供可在Mac上使用的ImageIO库。看一下iphone-exif项目,它可能会提供您所需要的内容。

另外,如果可能的话,还有一些关于你的代码的注释。

  • NSString有many path methods,你应该用它来处理路径时你的意图更清晰。
  • UIImageJPEGRepresentation已经返回一个自动释放的NSData实例。对于初学者来说这是一个常见的错误,但是你正在浪费代码并通过使用旧的NSData实例创建一个新的NSData实例来增加额外的内存管理工作。
  • NSData有一个方法-writeToFile:options:error:这将让你摆脱所有额外的NSFileHandle代码。我认为这也将使您不必首先使用NSFileManager创建文件。
  • 或者,您可以将UIImageJPEGRepresentation中的数据传递给 - [NSFileManager createFileAtPath:contents:attributes:]
  • 的contents参数