ios积累

iOS 存在的图片不保存到相册

2016-09-04  本文已影响1154人  zhouyuhan

保存图片到系统相册

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语言的那个方法了.

###就这样吧.
上一篇 下一篇

猜你喜欢

热点阅读