iOS实现图片保存与搜索功能
本文实现Photos.framework的常见功能,包括:创建自定义相册、保存图片到自定义相册、搜索所有相册的图片,具体内容如下
1、保存图片到相册
/** *保存图片到相册 */ -(IBAction)saveImage{ PHAuthorizationStatusstatus=[PHPhotoLibraryauthorizationStatus]; if(status==PHAuthorizationStatusDenied){ NSLog(@"请到【设置-隐私-照片】打开访问开关"); }elseif(status==PHAuthorizationStatusRestricted){ NSLog(@"无法访问相册"); }else{ //保存相片的标识 __blockNSString*assetId=nil; [[PHPhotoLibrarysharedPhotoLibrary]performChanges:^{ //保存相片到相机胶卷,并返回标识 assetId=[PHAssetCreationRequestcreationRequestForAssetFromImage:[UIImageimageNamed:@"logo"]].placeholderForCreatedAsset.localIdentifier; }completionHandler:^(BOOLsuccess,NSError*_Nullableerror){ if(!success){ NSLog(@"保存失败:%@",error); return; } //根据标识获得相片对象 PHAsset*asset=[PHAssetfetchAssetsWithLocalIdentifiers:@[assetId]options:nil].lastObject; //拿到自定义的相册对象 PHAssetCollection*collection=[selfcollection]; if(collection==nil)return; //保存相片到自定义相册中 [[PHPhotoLibrarysharedPhotoLibrary]performChanges:^{ [[PHAssetCollectionChangeRequestchangeRequestForAssetCollection:collection]addAssets:@[asset]]; }completionHandler:^(BOOLsuccess,NSError*_Nullableerror){ if(success){ NSLog(@"保存成功"); }else{ NSLog(@"保存失败:%@",error); } }]; }]; } }
2、搜索所有相片
/** *查询所有的图片 */ -(IBAction)searchAllImages{ //遍历所有的自定义相册 PHFetchResult<PHAssetCollection*>*collectionResult0=[PHAssetCollectionfetchAssetCollectionsWithType:PHAssetCollectionTypeAlbumsubtype:PHAssetCollectionSubtypeAlbumRegularoptions:nil]; for(PHAssetCollection*collectionincollectionResult0){ [selfsearchAllImagesInCollection:collection]; } //获得相机胶卷的图片 PHFetchResult<PHAssetCollection*>*collectionResult1=[PHAssetCollectionfetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbumsubtype:PHAssetCollectionSubtypeAlbumRegularoptions:nil]; for(PHAssetCollection*collectionincollectionResult1){ if(![collection.localizedTitleisEqualToString:@"CameraRoll"])continue; [selfsearchAllImagesInCollection:collection]; break; } } /** *查询某个相册里面的所有图片 */ -(void)searchAllImagesInCollection:(PHAssetCollection*)collection { //采取同步获取图片(只获得一次图片) PHImageRequestOptions*imageOptions=[[PHImageRequestOptionsalloc]init]; imageOptions.synchronous=YES; NSLog(@"相册名字:%@",collection.localizedTitle); //遍历这个相册中的所有图片 PHFetchResult<PHAsset*>*assetResult=[PHAssetfetchAssetsInAssetCollection:collectionoptions:nil]; for(PHAsset*assetinassetResult){ //过滤非图片 if(asset.mediaType!=PHAssetMediaTypeImage)continue; //图片原尺寸 CGSizetargetSize=CGSizeMake(asset.pixelWidth,asset.pixelHeight); //请求图片 [[PHImageManagerdefaultManager]requestImageForAsset:assettargetSize:targetSizecontentMode:PHImageContentModeDefaultoptions:imageOptionsresultHandler:^(UIImage*_Nullableresult,NSDictionary*_Nullableinfo){ NSLog(@"图片:%@",result); }]; } }
以上就是本文的全部内容,希望对大家的学习有所帮助。