圖片保存與搜索實現之iOS版

概述

Photos.framework的常見功能包括:創建自定義相冊、保存圖片到自定義相冊、搜索所有相冊的圖片。本文介紹該實現。

保存圖片到相冊

復制代碼


/**

* 保存圖片到相冊

*/

- (IBAction)saveImage {

PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];

if (status == PHAuthorizationStatusDenied) {

NSLog(@"請到【設置-隱私-照片】打開訪問開關");

} else if (status == PHAuthorizationStatusRestricted) {

NSLog(@"無法訪問相冊");

} else {

// 保存相片的標識

__block NSString *assetId = nil;

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{

// 保存相片到相機膠卷,并返回標識

assetId = [PHAssetCreationRequest creationRequestForAssetFromImage:[UIImage imageNamed:@"logo"]].placeholderForCreatedAsset.localIdentifier;

} completionHandler:^(BOOL success, NSError * _Nullable error) {

if (!success) {

NSLog(@"保存失敗:%@", error);

return;

}

// 根據標識獲得相片對象

PHAsset *asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetId] options:nil].lastObject;

// 拿到自定義的相冊對象

PHAssetCollection *collection = [self collection];

if (collection == nil) return;

// 保存相片到自定義相冊中

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{

[[PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection] addAssets:@[asset]];

} completionHandler:^(BOOL success, NSError * _Nullable error) {

if (success) {

NSLog(@"保存成功");

} else {

NSLog(@"保存失敗:%@", error);

}

}];

}];

}

}


搜索所有相片

復制代碼


/** * 查詢所有的圖片 */- (IBAction)searchAllImages {? ? ? ? ? ? // 遍歷所有的自定義相冊? ? PHFetchResult*collectionResult0 = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];? ? for (PHAssetCollection *collection in collectionResult0) {? ? ? ? [self searchAllImagesInCollection:collection];? ? }? ? ? ? ? ? // 獲得相機膠卷的圖片? ? PHFetchResult*collectionResult1 = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];? ? for (PHAssetCollection *collection in collectionResult1) {? ? ? ? if (![collection.localizedTitle isEqualToString:@"Camera Roll"]) continue;? ? ? ? [self searchAllImagesInCollection:collection];? ? ? ? break;? ? }}? ? /** * 查詢某個相冊里面的所有圖片 */- (void)searchAllImagesInCollection:(PHAssetCollection *)collection{? ? // 采取同步獲取圖片(只獲得一次圖片)? ? PHImageRequestOptions *imageOptions = [[PHImageRequestOptions alloc] init];? ? imageOptions.synchronous = YES;? ? ? ? ? ? NSLog(@"相冊名字:%@", collection.localizedTitle);? ? ? ? ? ? // 遍歷這個相冊中的所有圖片? ? PHFetchResult*assetResult = [PHAsset fetchAssetsInAssetCollection:collection options:nil];

for (PHAsset *asset in assetResult) {

// 過濾非圖片

if (asset.mediaType != PHAssetMediaTypeImage) continue;

// 圖片原尺寸

CGSize targetSize = CGSizeMake(asset.pixelWidth, asset.pixelHeight);

// 請求圖片

[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:targetSize contentMode:PHImageContentModeDefault options:imageOptions resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {

NSLog(@"圖片:%@", result);

}];

}


源碼下載

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容