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);
}];
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助。