background image

iOS

      

保存图片或视频到

 

 

    PhotoLibrary

 

  

存储图片到

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) {