iOS8之后, 保存图片到本地相册, 避免重复保存同一张
2017-12-14 15:56
736 查看
使用Photo Framework 框架中的 PHPhotoLibrary 操作
/**
* 将网络保存到本地相册, 并存入缓存数组以便使用
* imageUrl: 网络图片URL
*/
- (void)saveNetworkImageToAlbum:(NSString *)imageUrl{
//判断本地是否存在相同图片的标识
NSString *localIdentifier = [[NSUserDefaults
standardUserDefaults] objectForKey:imageUrl];
NSURL *fileURL = [NSURL
URLWithString:imageUrl];
NSData *imageData = [NSData
dataWithContentsOfURL:fileURL];
UIImage *image = [UIImage
imageWithData:imageData];
if (localIdentifier ==
nil) {
[self
execSavePhoto:image withUrl:imageUrl];
}else {
//根据本地图片的唯一标识符(localIdentifier),找到asset
PHAsset * asset = [PHAsset
fetchAssetsWithLocalIdentifiers:@[localIdentifier]
options:nil].firstObject;
if (asset ==
nil) {
[self
execSavePhoto:image withUrl:imageUrl];
}else {
[_selectedPhotos
addObject:image];
[_selectedAssets
addObject:asset];
}
}
}
/**
* 调用PHPhotoLibrary库 保存图片
*/
- (void)execSavePhoto:(UIImage *)image withUrl:(NSString *)urlStr{
if (iOS8Later){
NSError *err =
nil;
__block
PHAsset *phAsset = nil;
[[PHPhotoLibrary
sharedPhotoLibrary] performChangesAndWait:^{
//写入图片到相册
PHAssetChangeRequest *req = [PHAssetChangeRequest
creationRequestForAssetFromImage:image];
NSString *localIdentifier = req.placeholderForCreatedAsset.localIdentifier;
phAsset = [PHAsset
fetchAssetsWithLocalIdentifiers:@[localIdentifier]
options:nil].firstObject;
} error:&err];
if (err) {
NSLog(@"保存照片出错:%@",err.localizedDescription);
}else {
if (phAsset !=
nil) {
//将存在本地的图片的唯一标识符,存入plist,便于判断本地是否存在该图片
//key: 表示唯一的imageUrl value: 图片的唯一标识符(localIdentifier)
[[NSUserDefaults
standardUserDefaults] setObject:phAsset.localIdentifier
forKey:urlStr];
[[NSUserDefaults
standardUserDefaults] synchronize];
[_selectedPhotos
addObject:image];
[_selectedAssets
addObject:phAsset];
}
}
}
}
/**
* 将网络保存到本地相册, 并存入缓存数组以便使用
* imageUrl: 网络图片URL
*/
- (void)saveNetworkImageToAlbum:(NSString *)imageUrl{
//判断本地是否存在相同图片的标识
NSString *localIdentifier = [[NSUserDefaults
standardUserDefaults] objectForKey:imageUrl];
NSURL *fileURL = [NSURL
URLWithString:imageUrl];
NSData *imageData = [NSData
dataWithContentsOfURL:fileURL];
UIImage *image = [UIImage
imageWithData:imageData];
if (localIdentifier ==
nil) {
[self
execSavePhoto:image withUrl:imageUrl];
}else {
//根据本地图片的唯一标识符(localIdentifier),找到asset
PHAsset * asset = [PHAsset
fetchAssetsWithLocalIdentifiers:@[localIdentifier]
options:nil].firstObject;
if (asset ==
nil) {
[self
execSavePhoto:image withUrl:imageUrl];
}else {
[_selectedPhotos
addObject:image];
[_selectedAssets
addObject:asset];
}
}
}
/**
* 调用PHPhotoLibrary库 保存图片
*/
- (void)execSavePhoto:(UIImage *)image withUrl:(NSString *)urlStr{
if (iOS8Later){
NSError *err =
nil;
__block
PHAsset *phAsset = nil;
[[PHPhotoLibrary
sharedPhotoLibrary] performChangesAndWait:^{
//写入图片到相册
PHAssetChangeRequest *req = [PHAssetChangeRequest
creationRequestForAssetFromImage:image];
NSString *localIdentifier = req.placeholderForCreatedAsset.localIdentifier;
phAsset = [PHAsset
fetchAssetsWithLocalIdentifiers:@[localIdentifier]
options:nil].firstObject;
} error:&err];
if (err) {
NSLog(@"保存照片出错:%@",err.localizedDescription);
}else {
if (phAsset !=
nil) {
//将存在本地的图片的唯一标识符,存入plist,便于判断本地是否存在该图片
//key: 表示唯一的imageUrl value: 图片的唯一标识符(localIdentifier)
[[NSUserDefaults
standardUserDefaults] setObject:phAsset.localIdentifier
forKey:urlStr];
[[NSUserDefaults
standardUserDefaults] synchronize];
[_selectedPhotos
addObject:image];
[_selectedAssets
addObject:phAsset];
}
}
}
}
相关文章推荐
- 史上最强Android 开启照相或者是从本地相册选中一张图片以后先裁剪在保存并显示的讲解附源码i
- 长按手机图片保存到本地相册 (需要注意的是 保存之后要发送个广播 不然,更新不出来保存的图片)
- 史上最强Android 开启照相或者是从本地相册选中一张图片以后先裁剪在保存并显示的讲解附源码i
- 史上最强Android 开启照相或者是从本地相册选中一张图片以后先裁剪在保存并显示的讲解附源码
- 图片保存在相册中-相同图片(地址)避免重复保存
- 史上最强Android 开启照相或者是从本地相册选中一张图片以后先裁剪在保存并显示的讲解附源码i
- 长按 WebView 页面图片弹出对话框可以选择保存长按的图片到本地相册
- 图片保存到本地相册
- 保存图片到本地相册
- iOS图片保存到本地相册
- 图片保存到本地在相册中无法显示问题
- IOS图片保存到本地相册
- android保存图片到本地并可以在相册中显示出来
- 保存图片到本地,并及时在系统相册更新
- android安卓调用相册及相机并将图片保存本地
- Android 保存bitmap图像到本地之后,相册查看不显示问题
- ios 调用系统相机,图库,相册。将照片保存在相册,保存图片在本地,UIImagePickerController
- iOS swift实现图片不重复保存至相册
- android保存图片到本地并可以在相册中显示出来
- 保存图片到本地相册