存储图片到
photo library 与存储 video 到 photo library 的 API 差不多,但也有所不同。图片是
可以直接把数据写入
photo library,而 video 需要先把数据存到临时文件然后,然后通过临
时文件的路径去转存到
photo library。
我们直接来看相应的
API:
// These methods can be used to add photos or videos to the saved photos album.
// With a UIImage, the API user can use -[UIImage CGImage] to get a CGImageRef, and cast -
[UIImage imageOrientation] to ALAssetOrientation.
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef orientation:
(ALAssetOrientation)orientation completionBlock:
(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
// The API user will have to specify the orientation key in the metadata dictionary to preserve the
orientation of the image
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef metadata:(NSDictionary
*)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock
__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_1);
// If there is a conflict between the metadata in the image data and the metadata dictionary, the
image data metadata values will be overwritten
- (void)writeImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary
*)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock
__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_1);
- (void)writeVideoAtPathToSavedPhotosAlbum:(NSURL *)videoPathURL completionBlock:
(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock;
前三个都是存图片的,通过参数我们可以发现,第一个使用了我们传进去的方向,第二个
可以通过传入
image 的 metadata 保留 image 的 metadata,前两个都是把图片转成
CGImageRef 再保存,第三个是传入 NSData 所以可以完整保留 image 的信息,同时也有
metadata 传进去,如果 image 自带的信息与 metadata 冲突那 metadata 会覆盖图片本身所带
的
metadata。最后一个是存储视频的 API,可以看到参数是一个 NSURL,这个只要穿一个
本地临时文件的
file URL 就好了。
存储图片根据你的需求选择适当的
API,比如我们获取到的是 UIImage 的实例,那么我们
用第一个或者第二个比较方便,如果我们从本地临时文件读取
image 的数据那么我们直接
用第三个就比较方便。
下面来一段简单的代码:
- (void)saveImage:(UIImage*)image{
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc]init];
[assetsLibrary writeImageToSavedPhotosAlbum:[image CGImage] orientation:
(ALAssetOrientation)image.imageOrientation completionBlock:^(NSURL *assetURL, NSError
*error) {
if (error) {