第一部分:保存到系统相册
IOS保存图片功能只有一句话:UIImageWriteToSavedPhotosAlbum([erweima image], nil, nil,nil);
一般来说这就够了,但有的时候需要根据保存反馈来进行下一步操作,可以加如下方法:
/**
* save image to photo album completion method
*
* @param image saved image
* @param error saved error, if is not null that means save success
* @param contextInfo I don't kown?
*/
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
if (error != NULL){
//失败
}
else{
//成功
}
}
调用的时候这样写:UIImageWriteToSavedPhotosAlbum([erweima image], self, @selector(image:didFinishSavingWithError:contextInfo:),nil);
我也是刚查的,参考博文:http://blog.cnrainbird.com/index.php/2012/07/11/uiimagewritetosavedphotosalbum_pan_duan_shi_fou_bao_cun_cheng_gong/
第二部分:创建自定义相册,并保存图片,代码为主,可直接赋值,但是有个bug,暂时没找到怎么处理,如果有会的大神请指教一下
/**
* 创建自定义相册
Bug:详情见此方法中 TODO
*/
-(void)createAFonderInAlbum {
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
NSMutableArray *groups=[[NSMutableArray alloc]init];
ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop)
{
if (group)
{
[groups addObject:group];
}
else
{
BOOL haveHDRGroup = NO;
for (ALAssetsGroup *gp in groups)
{
NSString *name =[gp valueForProperty:ALAssetsGroupPropertyName];
if ([name isEqualToString:@"你的相册名"])
{
haveHDRGroup = YES;
}
}
if (!haveHDRGroup)
{
//do add a group named "XXXX"
[assetsLibrary addAssetsGroupAlbumWithName:@"你的相册名"
resultBlock:^(ALAssetsGroup *group)
{
if (group == nil) {//TODO Bug,第一次创建OK,当我在相册里删除刚创建的自定义相册后,再次创建,此时 group == nil
return ;
}
[groups addObject:group];
}
failureBlock:nil];
haveHDRGroup = YES;
}
}
};
//创建相簿
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:listGroupBlock failureBlock:nil];
//保存图片到刚创建的相册中
[self saveToAlbumWithMetadata:nil imageData:UIImagePNGRepresentation([erweima image]) customAlbumName:@"你的相册名" completionBlock:^{
//成功
} failureBlock:^(NSError *error) {
//失败
}];
}
/**
* save image to custom album
*
* @param metadata I have not use it,just nil
* @param imageData image png data to save
* @param customAlbumName custom album name
* @param completionBlock finish block,success
* @param failureBlock finish block,fail
*/
- (void)saveToAlbumWithMetadata:(NSDictionary *)metadata
imageData:(NSData *)imageData
customAlbumName:(NSString *)customAlbumName
completionBlock:(void (^)(void))completionBlock
failureBlock:(void (^)(NSError *error))failureBlock
{
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
__weak ALAssetsLibrary *weakSelf = assetsLibrary;
void (^AddAsset)(ALAssetsLibrary *, NSURL *) = ^(ALAssetsLibrary *assetsLibrary, NSURL *assetURL) {
[assetsLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset) {
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if ([[group valueForProperty:ALAssetsGroupPropertyName] isEqualToString:customAlbumName]) {
[group addAsset:asset];
if (completionBlock) {
completionBlock();
}
}
} failureBlock:^(NSError *error) {
if (failureBlock) {
failureBlock(error);
}
}];
} failureBlock:^(NSError *error) {
if (failureBlock) {
failureBlock(error);
}
}];
};
[assetsLibrary writeImageDataToSavedPhotosAlbum:imageData metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) {
if (customAlbumName) {
[assetsLibrary addAssetsGroupAlbumWithName:customAlbumName resultBlock:^(ALAssetsGroup *group) {
if (group) {
[weakSelf assetForURL:assetURL resultBlock:^(ALAsset *asset) {
[group addAsset:asset];
if (completionBlock) {
completionBlock();
}
} failureBlock:^(NSError *error) {
if (failureBlock) {
failureBlock(error);
}
}];
} else {
AddAsset(weakSelf, assetURL);
}
} failureBlock:^(NSError *error) {
AddAsset(weakSelf, assetURL);
}];
} else {
if (completionBlock) {
completionBlock();
}
}
}];
}
参考链接:http://www.jianshu.com/p/e6b5d55fd6ec