繁体   English   中英

iOS保存照片到相机胶卷不会保留EXIF / GPS元数据

[英]iOS saving photo to Camera Roll does not preserve EXIF/GPS metadata

我知道可以使用UIImageWriteToSavedPhotosAlbum将UIImage保存到相机胶卷中,但这种方法会从原始文件中UIImageWriteToSavedPhotosAlbum所有元数据(EXIF,GPS数据等)。 有没有办法保存原始文件,而不仅仅是将图像数据保存到iOS设备的相机胶卷?

编辑:我想我应该更具体一点。 目的是将现有JPEG文件的副本保存到用户的相机胶卷中。 最有效的方法是什么?

根据您保存图像的方式,您可以选择ALAssetsLibrary提供的方法之一

– writeImageDataToSavedPhotosAlbum:metadata:completionBlock:

– writeImageToSavedPhotosAlbum:metadata:completionBlock:

(取决于您是将图像作为实际UIImage还是作为NSData)

http://developer.apple.com/library/ios/#documentation/AssetsLibrary/Reference/ALAssetsLibrary_Class/Reference/Reference.html

请注意,您必须为字典设置正确的密钥,否则可能无法正确保存。

以下是GPS信息的示例:

NSDictionary *gpsDict = [NSDictionary dictionaryWithObjectsAndKeys:
                 [NSNumber numberWithFloat:fabs(loc.coordinate.latitude)], kCGImagePropertyGPSLatitude, 
                 ((loc.coordinate.latitude >= 0) ? @"N" : @"S"), kCGImagePropertyGPSLatitudeRef, 
                 [NSNumber numberWithFloat:fabs(loc.coordinate.longitude)], kCGImagePropertyGPSLongitude, 
                 ((loc.coordinate.longitude >= 0) ? @"E" : @"W"), kCGImagePropertyGPSLongitudeRef, 
                 [formatter stringFromDate:[loc timestamp]], kCGImagePropertyGPSTimeStamp, 
                 [NSNumber numberWithFloat:fabs(loc.altitude)], kCGImagePropertyGPSAltitude, 
                 nil];

这是一个键列表:

http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGImageProperties_Reference/Reference/reference.html#//apple_ref/doc/uid/TP40005103

你正在寻找UIImagePickerControllerDelegate。

从iOS 4.0开始,您可以将静止图像元数据和静止图像一起保存到相机胶卷。 为此,请使用Assets Library框架的writeImageToSavedPhotosAlbum:metadata:completionBlock:方法。 请参阅UIImagePickerControllerMediaMetadata键的说明。

UIImagePickerControllerDelegate协议参考

对于使用Photos API的Swift解决方案(iOS 9中不推荐使用ALAssetLibrary ),您可以在此处查看此问题的解决方案,包括示例代码

使用Photos API时,需要注意的关键是PHAsset的.location属性不会将CLLocation元数据嵌入到文件本身中,因此使用EXIF查看器不会显示任何结果。

要解决此问题,您必须先将任何元数据更改直接嵌入到图像本身的数据中,然后再使用Photos API将其写入相机胶卷(或者,对于9之前的iOS版本,您必须使用数据编写临时文件嵌入的元数据并从文件的URL创建PHAsset)。

另请注意,将图像数据转换为UIImage的行为似乎剥离了元数据,因此请小心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM