保存圖片到系統(tǒng)相冊
first, 先要講的是如何將一張圖片保存到系統(tǒng)的相冊, 這里我們就不講保存到自定義的相冊什么鬼的了, 對自定義相冊有興趣的請關(guān)注這張界面的左上角那個紅色的叉叉, 對, 就是這樣.
保存圖片到相冊的方法有很多, 首先是C語言的:
就像這樣
UIImageWriteToSavedPhotosAlbum(self.iconView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
```
還有這樣
```
'' (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo'' {
'' if(!error){
'' NSLog(@"save success");
'' }else{
'' NSLog(@"save failed");
'' }''
}
```
對, 第二個就是第一個的回調(diào)的方法
嗯, C語言的方法就是這樣
然后就是OC的方法了, OC的方法有很多, 這里我還是撿一個用的順手的吧, 其他的
就不舉了,
等等....
你才不舉呢!!
```
'' ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
''
'' [library writeImageToSavedPhotosAlbum:self.preViewImage.image.CGImage orientation:(ALAssetOrientation)self.preViewImage.image.imageOrientation completionBlock:^(NSURL *assetURL, NSError *error) { ''
'' [self showMessage:@"保存成功"];
''
'' } failureBlock:^(NSError *error) {
'' [self showMessage:@"保存失敗"];
'' }];
'' }];
'' }
```
> 對, 沒錯, 這個是ios 9以前的方法, 現(xiàn)在已經(jīng)廢棄了, 但我就是喜歡用!你管的著么?— 莎士比亞
###嗯, 感覺我要說完了.
#錯!
你們完全搞錯重點了, 我其實并不是來說如何保存一個圖片的, 畢竟保存圖片哪里都有, 這不是我要講的重點. 因為我有說的是獨一家的, 那就是保存圖片的時候怎么才能不保存相同的圖片, 就像你在網(wǎng)易新聞看新聞, 覺的這個圖片很有(huang)趣(bao), 你就可以點一下保存圖片到自己手機的相冊. 再點一下, 又多了一張, 在點一下, 又多了一張........但是我要這么多相同的干嘛啊? 既占相冊的空間不說, 這不是有病么?
嗯, 那么我就要說怎么判斷一張圖片你之前是否保存過了
直接上代碼
```
- '' (void)saveImageToPhone {
'' // 保存圖片, 并且保存的圖片不能再次被保存直到被刪除
'' NSString *key = [NSString stringWithFormat:@"assetUrl %@",imageModel.url];
''
'' NSString *savedValue = [[NSUserDefaults standardUserDefaults] stringForKey:key];
'' NSURL *url = [NSURL URLWithString:savedValue];
''
'' if (url != nil) {
'' PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:[NSArray arrayWithObject:url] options:nil];
''
'' if (result.count) {
'' [self showMessage:@"圖片已經(jīng)存在"];
'' return;
'' }
'' }
''
'' ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
''
'' [library writeImageToSavedPhotosAlbum:self.iconView.image.CGImage orientation:(ALAssetOrientation)self.preViewImage.image.imageOrientation completionBlock:^(NSURL *assetURL, NSError *error) {
'' [library assetForURL:assetURL resultBlock:^(ALAsset *asset) {
''
'' NSString *ass = [assetURL absoluteString];
'' [[NSUserDefaults standardUserDefaults] setObject:ass forKey:key];
'' [[NSUserDefaults standardUserDefaults] synchronize];
''
'' [self showMessage:@"保存成功"];
''
'' } failureBlock:^(NSError *error) {
'' [self showMessage:@"保存失敗"];
'' }];
'' }];''
}
```
> 對, 沒錯, 這個就是終極版的了, 用到了NSUserDefaults 保存每個圖片的asset對象里的assetURL, 要是key對應的value有值并且數(shù)量不為零的話, 那就說明存在. 就不需要重復保存了. **注意**:里面需要import <AssetsLibrary/AssetsLibrary.h>這個框架, 并且使用的是這個框架里的writeImageToSavedPhotosAlbum:方法來保存圖片而不是使用C語言的那個方法了.
###就這樣吧.