iOS--將圖片保存至本地相冊

對方給我發(fā)一個圖片,我要保存到本地,IOS的UIKit Framework提供了UIImageWriteToSavedPhotosAlbum方法對圖像進(jìn)行保存,該方法會將image保存至用戶的相冊中:

上代碼:

void UIImageWriteToSavedPhotosAlbum (

UIImage? *image,

id? ? ? completionTarget,

SEL? ? ? completionSelector,

void? ? *contextInfo

);

參數(shù)說明:

image : 需要保存的圖片對象

id : 響應(yīng)方法對象

SEL : 選擇方法

步驟:

/**

*? 將圖片添加到本地相冊

*/

- (void)addImageViewTolocal{

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:_currentItem.imageURL]];

UIImage *myImage = [UIImage imageWithData:data];

[self saveImageToPhotos:myImage];

}

步驟二:

- (void)saveImageToPhotos:(UIImage*)savedImage

{

UIImageWriteToSavedPhotosAlbum(savedImage, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);

}

步驟三:

- (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo

{

NSString *msg = nil ;

if(error != NULL){

msg = @"保存圖片失敗" ;

}else{

msg = @"保存圖片成功" ;

}

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"保存圖片結(jié)果提示"

message:msg

delegate:self

cancelButtonTitle:@"確定"

otherButtonTitles:nil];

[alert show];

}

這樣就可以實(shí)現(xiàn)將圖片保存至本地相冊;

? 今天優(yōu)化上面的方法,只能保存到相冊,而不能保存到指定相冊,

首先需要導(dǎo)入系統(tǒng)的庫:?


創(chuàng)建一個管理類:


.h

#import#import

@class UIImage;

typedef void (^STAlbumSaveHandler)(UIImage *image, NSError *error);

/** * @brief 將圖片寫入相冊,使用ALAssetLibrary * *?

@param? image? ? 需要寫入的圖片 *?

@param? album? ? 相冊名稱,如果相冊不存在,則新建相冊 *?

@param? completionHandler 回調(diào)?

*/

extern void STImageWriteToPhotosAlbum(UIImage *image, NSString *album, STAlbumSaveHandler completionHandler);

@interface STAlbumManager : NSObject

+ (instancetype)sharedManager;

/** * @brief 將圖片寫入相冊,使用ALAssetLibrary * *?

@param? image? ? 需要寫入的圖片 *?

@param? album? ? 相冊名稱,如果相冊不存在,則新建相冊 *

?@param? completionHandler 回調(diào)

?*/

- (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

.m

#import "STAlbumManager.h"

#importvoid 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);

}

/// 注意,這里每次都置空是因?yàn)槠陂g如果操作相冊了,下次保存之前希望能取到最新狀態(tài)。

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

/// 循環(huán)結(jié)束

if (group) {

assetForURLBlock(assetURL, group);

} else {

[self addAssetsGroupAlbumWithName:album

resultBlock:^(ALAssetsGroup *group) { assetForURLBlock(assetURL, group); }

failureBlock:completionHandler];

}

}

}

failureBlock:completionHandler];

}

@end

在需要的地方調(diào)用就可以實(shí)現(xiàn)了...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容