iOS将图片保存到指定相册

http://bluereader.org/article/102764087git

 

iOS系统提供了保存图片的方法,可是该方法有一个弊端,该方法没法指定要保存图片的相册名称。
UIKIT_EXTERN void UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo); 目前不少图片相关应用都会将图片写入指定相册,下面提供简单的写入指定相册的方法。
我大概设计了这么几个接口,以下代码所示github

[STAlumbManager.h] [url] [link text]atom

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 
@class UIImage; typedef void (^STAlbumSaveHandler)(UIImage *image, NSError *error); /**  * @brief 将图片写入相册,使用ALAssetLibrary  *  * @param image 须要写入的图片  * @param album 相册名称,若是相册不存在,则新建相册  * @param completionHandler 回调  */ extern void STImageWriteToPhotosAlbum(UIImage *image, NSString *album, STAlbumSaveHandler completionHandler); @interface STAlbumManager : NSObject + (instancetype)sharedManager; /**  * @brief 将图片写入相册,使用ALAssetLibrary  *  * @param image 须要写入的图片  * @param album 相册名称,若是相册不存在,则新建相册  * @param completionHandler 回调  */ - (void)saveImage:(UIImage *)image toAlbum:(NSString *)album completionHandler:(STAlbumSaveHandler)completionHandler; @end @interface ALAssetsLibrary (STAssetsLibrary) - (void)writeImage:(UIImage *)image toAlbum:(NSString *)album completionHandler:(STAlbumSaveHandler)completionHandler; @end


实现文件url

[STAlumbManager.m] [url] [link text]spa

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 
#import "STAlbumManager.h" #import <UIKit/UIKit.h> void STImageWriteToPhotosAlbum(UIImage *image, NSString *album, STAlbumSaveHandler completionHandler) {  [[STAlbumManager sharedManager] saveImage:image toAlbum:album completionHandler:completionHandler]; } @interface STAlbumManager () @property(nonatomic, strong) ALAssetsLibrary *assetsLibrary; @end @implementation STAlbumManager static STAlbumManager *_sharedManager; + (instancetype)sharedManager {  static dispatch_once_t onceToken;  dispatch_once(&onceToken, ^{ _sharedManager = [[self alloc] init]; });  return _sharedManager; } - (instancetype)init {  self = [super init];  if (self) {  }  return self; } - (ALAssetsLibrary *)assetsLibrary {  if (!_assetsLibrary) {  _assetsLibrary = [[ALAssetsLibrary alloc] init];  }  return _assetsLibrary; } - (void)saveImage:(UIImage *)image toAlbum:(NSString *)album completionHandler:(STAlbumSaveHandler)completionHandler {  [self.assetsLibrary writeImage:image  toAlbum:album  completionHandler:^(UIImage *image, NSError *error) {  if (completionHandler) {  completionHandler(image, error);  }  /// 注意,这里每次都置空是由于期间若是操做相册了,下次保存以前但愿能取到最新状态。  self.assetsLibrary = nil;  }]; } @end @implementation ALAssetsLibrary (STAssetsLibrary) - (void)writeImage:(UIImage *)image toAlbum:(NSString *)album completionHandler:(STAlbumSaveHandler)completionHandler {  [self writeImageToSavedPhotosAlbum:image.CGImage  orientation:(ALAssetOrientation)image.imageOrientation  completionBlock:^(NSURL *assetURL, NSError *error) {  if (error) {  if (completionHandler) {  completionHandler(image, error);  }  } else {  [self addAssetURL:assetURL  toAlbum:album  completionHandler:^(NSError *error) {  if (completionHandler) {  completionHandler(image, error);  }  }];  }  }]; } - (void)addAssetURL:(NSURL*)assetURLtoAlbum:(NSString*)albumcompletionHandler:(ALAssetsLibraryAccessFailureBlock)completionHandler{void(^assetForURLBlock)(NSURL*,ALAssetsGroup*)=^(NSURL*URL,ALAssetsGroup*group){[selfassetForURL:assetURLresultBlock:^(ALAsset*asset){[groupaddAsset:asset];completionHandler(nil);}failureBlock:^(NSError*error){completionHandler(error);}];};__blockALAssetsGroup*group;[selfenumerateGroupsWithTypes:ALAssetsGroupAlbumusingBlock:^(ALAssetsGroup*_group,BOOL*stop){if([albumisEqualToString:[_groupvalueForProperty:ALAssetsGroupPropertyName]]){group=_group;}if(!_group){/// 循环结束if(group){assetForURLBlock(assetURL,group);}else{[selfaddAssetsGroupAlbumWithName:albumresultBlock:^(ALAssetsGroup*group){assetForURLBlock(assetURL,group);}failureBlock:completionHandler];}}}failureBlock:completionHandler];}@end

简单介绍一下代码的使用方法
该接口定义申明了一个 C方法,用来提供便捷的保存调用,使用方能够直接经过调用
extern void STImageWriteToPhotosAlbum(UIImage *image, NSString *album, STAlbumSaveHandler completionHandler);
就能够直接保存对应的image到对应的album,若是没有找到album,则会建立新的album,图片保存完毕以后,会调用block回调。
或者使用Manager单例所提供的方法 - (void)saveImage:(UIImage *)image toAlbum:(NSString *)album completionHandler:(STAlbumSaveHandler)completionHandler 
这样就实现了将图片保存到指定相册,感谢 技术笨 提供Demo设计

相关文章
相关标签/搜索