iOS實(shí)現(xiàn)圖片保存與搜索功能
本文實(shí)現(xiàn)Photos.framework的常見功能,包括:創(chuàng)建自定義相冊(cè)、保存圖片到自定義相冊(cè)、搜索所有相冊(cè)的圖片,具體內(nèi)容如下
1、保存圖片到相冊(cè)
/** * 保存圖片到相冊(cè) */ - (IBAction)saveImage { PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus]; if (status == PHAuthorizationStatusDenied) { NSLog(@"請(qǐng)到【設(shè)置-隱私-照片】打開訪問開關(guān)"); } else if (status == PHAuthorizationStatusRestricted) { NSLog(@"無法訪問相冊(cè)"); } else { // 保存相片的標(biāo)識(shí) __block NSString *assetId = nil; [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ // 保存相片到相機(jī)膠卷,并返回標(biāo)識(shí) assetId = [PHAssetCreationRequest creationRequestForAssetFromImage:[UIImage imageNamed:@"logo"]].placeholderForCreatedAsset.localIdentifier; } completionHandler:^(BOOL success, NSError * _Nullable error) { if (!success) { NSLog(@"保存失敗:%@", error); return; } // 根據(jù)標(biāo)識(shí)獲得相片對(duì)象 PHAsset *asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetId] options:nil].lastObject; // 拿到自定義的相冊(cè)對(duì)象 PHAssetCollection *collection = [self collection]; if (collection == nil) return; // 保存相片到自定義相冊(cè)中 [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ [[PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection] addAssets:@[asset]]; } completionHandler:^(BOOL success, NSError * _Nullable error) { if (success) { NSLog(@"保存成功"); } else { NSLog(@"保存失?。?@", error); } }]; }]; } }
2、搜索所有相片
/** * 查詢所有的圖片 */ - (IBAction)searchAllImages { // 遍歷所有的自定義相冊(cè) PHFetchResult<PHAssetCollection *> *collectionResult0 = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; for (PHAssetCollection *collection in collectionResult0) { [self searchAllImagesInCollection:collection]; } // 獲得相機(jī)膠卷的圖片 PHFetchResult<PHAssetCollection *> *collectionResult1 = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; for (PHAssetCollection *collection in collectionResult1) { if (![collection.localizedTitle isEqualToString:@"Camera Roll"]) continue; [self searchAllImagesInCollection:collection]; break; } } /** * 查詢某個(gè)相冊(cè)里面的所有圖片 */ - (void)searchAllImagesInCollection:(PHAssetCollection *)collection { // 采取同步獲取圖片(只獲得一次圖片) PHImageRequestOptions *imageOptions = [[PHImageRequestOptions alloc] init]; imageOptions.synchronous = YES; NSLog(@"相冊(cè)名字:%@", collection.localizedTitle); // 遍歷這個(gè)相冊(cè)中的所有圖片 PHFetchResult<PHAsset *> *assetResult = [PHAsset fetchAssetsInAssetCollection:collection options:nil]; for (PHAsset *asset in assetResult) { // 過濾非圖片 if (asset.mediaType != PHAssetMediaTypeImage) continue; // 圖片原尺寸 CGSize targetSize = CGSizeMake(asset.pixelWidth, asset.pixelHeight); // 請(qǐng)求圖片 [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:targetSize contentMode:PHImageContentModeDefault options:imageOptions resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { NSLog(@"圖片:%@", result); }]; } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
詳解iOS如何讓Lottie使用網(wǎng)絡(luò)資源做動(dòng)畫的實(shí)現(xiàn)
這篇文章主要為大家介紹了iOS如何讓Lottie使用網(wǎng)絡(luò)資源做動(dòng)畫實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02iOS開發(fā)中如何優(yōu)雅的調(diào)試數(shù)據(jù)庫(kù)詳解
這篇文章主要給大家介紹了關(guān)于iOS開發(fā)中如何優(yōu)雅的調(diào)試數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12iOS中使用schema協(xié)議調(diào)用APP和使用iframe打開APP的例子
這篇文章主要介紹了iOS中使用schema協(xié)議調(diào)用APP和使用iframe打開APP的例子,用在瀏覽器中打開APP,需要的朋友可以參考下2014-08-08詳解IOS開發(fā)中圖片上傳時(shí)兩種圖片壓縮方式的比較
這篇文章主要介紹了IOS開發(fā)中圖片上傳時(shí)兩種圖片壓縮方式的比較,需要的朋友可以參考下2017-03-03iOS開發(fā)之widget實(shí)現(xiàn)詳解
這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)之widget實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09