保存图片到系统相册
first, 先要讲的是如何将一张图片保存到系统的相册, 这里我们就不讲保存到自定义的相册什么鬼的了, 对自定义相册有兴趣的请关注这张界面的左上角那个红色的叉叉, 对, 就是这样.
保存图片到相册的方法有很多, 首先是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");
'' }''
}
```
对, 第二个就是第一个的回调的方法
嗯, 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以前的方法, 现在已经废弃了, 但我就是喜欢用!你管的着么?— 莎士比亚
###嗯, 感觉我要说完了.
#错!
你们完全搞错重点了, 我其实并不是来说如何保存一个图片的, 毕竟保存图片哪里都有, 这不是我要讲的重点. 因为我有说的是独一家的, 那就是保存图片的时候怎么才能不保存相同的图片, 就像你在网易新闻看新闻, 觉的这个图片很有(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:@"图片已经存在"];
'' 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有值并且数量不为零的话, 那就说明存在. 就不需要重复保存了. **注意**:里面需要import <AssetsLibrary/AssetsLibrary.h>这个框架, 并且使用的是这个框架里的writeImageToSavedPhotosAlbum:方法来保存图片而不是使用C语言的那个方法了.
###就这样吧.