現代人使用智慧手機已經脫離不了「相機」,於是許多應用需要取得本機相片 (Fetch Photos from Photo Library),我們開發者要怎麼做,才能輕易取得使用者珍貴的相片呢?
這時候就要借用iOS 8新出現的Photos Framework。
/** Theme: Fetch Photos from Photo Library IDE: Xcode 8 Language: Objective C Date: 105/12/18 Author: HappyMan Blog: https://cg2010studio.wordpress.com/ */ // photo url NSString *urlStr = [NSString stringWithFormat:@"assets-library://asset/asset.JPG?id=%@&ext=JPG", selectedPhotoArr[index]]; NSURL *url = [NSURL URLWithString:urlStr]; PHFetchResult *fetchResult = [PHAsset fetchAssetsWithALAssetURLs:@[url] options:nil]; PHAsset *asset = fetchResult.firstObject; PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init]; options.resizeMode = PHImageRequestOptionsResizeModeExact; options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; options.synchronous = YES; [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(500, 500) contentMode:PHImageContentModeAspectFit options:options resultHandler:^(UIImage *img, NSDictionary *info) { }];
取得image後有兩個參數:
Printing description of img:
<UIImage: 0x174297f70>, {500, 374}
Printing description of info:
{
PHImageFileOrientationKey = 0;
PHImageFileSandboxExtensionTokenKey = “eef7822c2da2198f257ddf4707eb69570be47937;00000000;00000000;000000000000001a;com.apple.app-sandbox.read;00000001;01000002;0000000004242c83;/private/var/mobile/Media/DCIM/135APPLE/IMG_5172.JPG";
PHImageFileURLKey = “file:///var/mobile/Media/DCIM/135APPLE/IMG_5172.JPG";
PHImageFileUTIKey = “public.jpeg";
PHImageResultDeliveredImageFormatKey = 9999;
PHImageResultIsDegradedKey = 0;
PHImageResultIsInCloudKey = 0;
PHImageResultIsPlaceholderKey = 0;
PHImageResultOptimizedForSharing = 0;
PHImageResultWantedImageFormatKey = 4035;
}
Options參數很重要,決定是否要同步或非同步來處理,多次獲取同一張相片,但是第一次先獲取低解析度版本相片,之後獲取高低解析度版本相片。
發現似乎resizeMode設定為PHImageRequestOptionsResizeModeExact,targetSize才有作用,如此來取得我們所想要大小的相片。過去在這卡很久,以為只能取得超低解析度(如75×50)和原始圖(如2160×3720)。
其中Photo ID長得像這樣:
703E488F-9E52-475E-84F9-289DE6A31D00
然後把它組合成URL:
assets-library://asset/asset.JPG?id=703E488F-9E52-475E-84F9-289DE6A31D00&ext=JPG
於是乎就能取得Asset來獲得真正的影像檔喔!
參考:
隨意留個言吧:)~