iOS将图片保存到指定相册
来源:互联网 发布:如何查看端口是否开放 编辑:程序博客网 时间:2024/05/16 00:38
http://bluereader.org/article/102764087
iOS系统提供了保存图片的方法,但是该方法有一个弊端,该方法无法指定要保存图片的相册名称。UIKIT_EXTERN void UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);
目前很多图片相关应用都会将图片写入指定相册,下面提供简单的写入指定相册的方法。
我大概设计了这么几个接口,如下代码所示
1234567891011121314151617181920212223242526272829303132
@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
实现文件
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
#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 STAlbumManagerstatic 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 *)assetURL toAlbum:(NSString *)album completionHandler:(ALAssetsLibraryAccessFailureBlock)completionHandler { void (^assetForURLBlock)(NSURL *, ALAssetsGroup *) = ^(NSURL *URL, ALAssetsGroup *group) { [self assetForURL:assetURL resultBlock:^(ALAsset *asset) { [group addAsset:asset]; completionHandler(nil); } failureBlock:^(NSError *error) { completionHandler(error); }]; }; __block ALAssetsGroup *group; [self enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:^(ALAssetsGroup *_group, BOOL *stop) { if ([album isEqualToString:[_group valueForProperty:ALAssetsGroupPropertyName]]) { group = _group; } if (!_group) { /// 循环结束 if (group) { assetForURLBlock(assetURL, group); } else { [self addAssetsGroupAlbumWithName:album resultBlock:^(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
0 0
- iOS将图片保存到指定相册
- 将图片保存到ios相册
- iOS 将图片保存到相册
- iOS swift-将图片保存到相册
- iOS 保存图片到相册, 保存到指定的路径
- 将图片保存到相册
- 将图片保存到相册
- 将图片保存到相册
- iOS-将图片保存到照片相册中
- iOS 将图片保存到iPhone本地相册
- iOS---如何截图,如何将图片保存到相册
- iOS保存图片到相册
- iOS保存图片到相册
- ios 图片保存到 相册
- iOS 保存图片到相册
- iOS 图片保存到相册
- iOS 保存图片到相册
- iOS 保存图片到相册
- Android aplog是什么?
- Android系统源码基础知识讲解
- 什么是回调函数
- Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现
- Java windows 64 机器配置32 位eclipse
- iOS将图片保存到指定相册
- linux查找目录下的所有文件中是否含有某个字符串
- 每日一得--redis缓存服务相关知识
- session学习
- 对Objective-C中Block的追探
- localhost与127.0.0.1的区别
- log4j配置祥解
- 排列与组合算法
- Android 日历插件