我知道可以使用UIImageWriteToSavedPhotosAlbum
将UIImage保存到相机胶卷中,但这种方法会剥离原始文件的所有元数据(EXIF,GPS数据等)。是否有一种方法可以将原始文件保存到iOS设备的相机胶卷中,而不仅仅是图像数据?
编辑:我想我应该更加具体。目标是将现有JPEG文件的副本保存到用户的相机胶卷中。最有效的方法是什么?
我知道可以使用UIImageWriteToSavedPhotosAlbum
将UIImage保存到相机胶卷中,但这种方法会剥离原始文件的所有元数据(EXIF,GPS数据等)。是否有一种方法可以将原始文件保存到iOS设备的相机胶卷中,而不仅仅是图像数据?
编辑:我想我应该更加具体。目标是将现有JPEG文件的副本保存到用户的相机胶卷中。最有效的方法是什么?
根据您保存图像的方式,您可以选择由ALAssetsLibrary提供的方法之一。
– writeImageDataToSavedPhotosAlbum:metadata:completionBlock:
– writeImageToSavedPhotosAlbum:metadata:completionBlock:
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];
你要找的是UIImagePickerControllerDelegate。
从iOS 4.0开始,你可以将静态图像元数据与静态图像一起保存到相机胶卷中。为此,请使用Assets Library框架的writeImageToSavedPhotosAlbum:metadata:completionBlock:方法。请参阅UIImagePickerControllerMediaMetadata键的描述。
如果您需要一个使用Photos API的快速解决方案(ALAssetLibrary在iOS 9中已弃用),您可以查看我的解决方案这里,包括示例代码。
使用Photos API时,需要注意的关键点是PHAsset的.location属性不会将CLLocation元数据嵌入到文件本身中,因此使用EXIF查看器将不会返回任何结果。
为了解决这个问题,您必须直接将任何元数据更改嵌入到图像的数据中,然后使用Photos API将其写入相机胶卷(或者对于iOS 9之前的版本,您必须使用带有嵌入式元数据的数据编写临时文件,并从该文件的URL创建PHAsset)。
还要注意,将图像数据转换为UIImage似乎会剥离元数据,因此请小心处理。