iOS将图片保存到指定相册
2016-03-09 09:52
501 查看
http://bluereader.org/article/102764087
iOS系统提供了保存图片的方法,但是该方法有一个弊端,该方法无法指定要保存图片的相册名称。
我大概设计了这么几个接口,如下代码所示
[STAlumbManager.h]
简单介绍一下代码的使用方法
该接口定义申明了一个 C方法,用来提供便捷的保存调用,使用方可以直接通过调用
就可以直接保存对应的image到对应的album,如果没有找到album,则会创建新的album,图片保存完毕之后,会调用block回调。
或者使用Manager单例所提供的方法
这样就实现了将图片保存到指定相册,感谢 技术笨 提供[url=https://github.com/lovesunstar/STAlbumManagerDemo]Demo" target=_blank> [link text]
实现文件
[STAlumbManager.m] [url] [link text]
简单介绍一下代码的使用方法
该接口定义申明了一个 C方法,用来提供便捷的保存调用,使用方可以直接通过调用
就可以直接保存对应的image到对应的album,如果没有找到album,则会创建新的album,图片保存完毕之后,会调用block回调。
或者使用Manager单例所提供的方法
这样就实现了将图片保存到指定相册,感谢 技术笨 提供[url=https://github.com/lovesunstar/STAlbumManagerDemo]Demo
iOS系统提供了保存图片的方法,但是该方法有一个弊端,该方法无法指定要保存图片的相册名称。
UIKIT_EXTERN void UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);目前很多图片相关应用都会将图片写入指定相册,下面提供简单的写入指定相册的方法。
我大概设计了这么几个接口,如下代码所示
[STAlumbManager.h]
简单介绍一下代码的使用方法
该接口定义申明了一个 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
这样就实现了将图片保存到指定相册,感谢 技术笨 提供[url=https://github.com/lovesunstar/STAlbumManagerDemo]Demo" target=_blank> [link text]
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 |
[STAlumbManager.m] [url] [link text]
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 3233 | #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
这样就实现了将图片保存到指定相册,感谢 技术笨 提供[url=https://github.com/lovesunstar/STAlbumManagerDemo]Demo
相关文章推荐
- iOS析构崩溃问题
- iOS 静态库里的category中的类方法不能识别问题
- IOS 对相册图片进行读取、存储到指定文件夹
- IOS 图片拉伸处理方法
- IOS之rpc实现
- iOS 国际化
- ios:关于图片平铺
- iOS转场动画详解
- iOS ---Extension编程指南
- iOS----Xcode6或者Xcode7设置LaunchImage图标
- iOS----------使用 Xcode6或Xcode7配置.pch文件
- iOS 多线程 进程、线程、并发、串行、同步、异步—— iOS 编码复习(四)(多线程2)
- ios-显示LCD效果
- kidd风的IOS日志之IOSIOS-API概述
- 用纯代码方式开发IOS应用程序
- IOS新手引导页的实现,源码。
- IOS源码之OC相册,可以循环查看图片
- ios 延迟加载执行 dispatch_after
- ios afneworking2.x 使用方法
- 【原】iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等