現代人使用智慧手機已經脫離不了「相機」,於是許多應用需要取得本機相片 (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來獲得真正的影像檔喔!
參考:
隨意留個言吧:)~