Swift3.0:PhotoKit的使用


一、介紹

 iOS8之前使用AssetsLibrary來獲取相冊資源,iOS新引入框架PhotoKit框架,也即Photos.framework

 

二、PhotoKit的基本構成包括如下幾項:

  • PHAsset:代表照片庫中的一個資源,跟ALAsset類似,通過PHAsset可以獲取和保存資源(原圖、不同尺寸的縮略圖);
  • PHFetchOptions:獲取資源時的參數,充當了過濾器的作用,可以過濾相冊的類型、日期、名稱等,從而直接獲取對應的資源而不需要枚舉。可以傳 nil,即使系統默認值;
  • PHAssetCollection:PHCollection的子類,表示一個相冊或者一個時刻,或者是一個只能相冊(系統提供的特定的一系列相冊,例如最近刪除、視頻列表、收藏等);
  • PHFetchResult:表示一系列的資源結果集合,也可以是相冊的集合,從PHCollection的類方法中獲取;
  • PHImageManager:用於處理資源的加載,加載圖片的過程帶有緩存處理,可以通過傳入一個PHImageRequstOptions控制資源的輸出尺寸等規格;
  • PHImageRequestOptions:如上面所說,控制加載圖片的一系列參數;
  • PHCollectionList:表示一組PHCollection,本身也是一個PHCollection。

注意:PHCollection作為一個集合,可以包含其他集合,這使得Photokit的組成比AssetsLibrary要復雜一些。另外,與AssetsLibrary相似,一個PHAsset可以同時屬於多個不同的PHAssetCollection,最常見的例子就是剛剛拍攝的照片,至少同時屬於“最近添加”、“相機膠卷“以及”照片-精選“這3個PHAssetCollection。

 

三、PhotoKit結構圖如下:

在PhotoKit中,采用”獲取“的方式拉取資源,這些資源的手段都是一系列形如class func fetchXXX(...,options:PHFetchOptions)->PHFetchResult的類方法,具體根據需要獲取的是相冊、時刻還是資源來決定使用哪一個類方法,這類方法中option充當了過濾器的作用,可以過濾相冊的類型、日期、名稱等,從而直接獲取對應的資源,而不需要枚舉。

 

四、實例

1、列出系統所有的相冊,並獲取每一個相冊中的PHAsset對象

  func fetchAllSystemAblum() -> Void {
        let smartAlbums:PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .albumRegular, options: nil)
        print("智能\(smartAlbums.count)個")
        
        //smartAlbums中保存的是各個智能相冊對應的PHAssetCollection
        for i in 0..<smartAlbums.count {
            
            //獲取一個相冊(PHAssetCollection)
            let collection = smartAlbums[i]
            
            if collection.isKind(of: PHAssetCollection.classForCoder()) {
                
                //賦值
                let assetCollection = collection 
                
                //從每一個智能相冊獲取到的PHFetchResult中包含的才是真正的資源(PHAsset)
                let assetsFetchResults:PHFetchResult = PHAsset.fetchAssets(in: assetCollection, options: nil)
                
                print("\(assetCollection.localizedTitle)相冊,共有照片數:\(assetsFetchResults.count)")
                
                assetsFetchResults.enumerateObjects({ (asset, i, nil) in
                    //獲取每一個資源(PHAsset)
                    print("\(asset)")
                })
            }
        }
    }

打印結果:

智能12個
Optional("Favorites")相冊,共有照片數:0
Optional("Recently Deleted")相冊,共有照片數:0
Optional("Panoramas")相冊,共有照片數:0
Optional("Camera Roll")相冊,共有照片數:6
<PHAsset: 0x7f9c94d09ab0> 106E99A1-4F6A-45A2-B320-B0AD4A8E8473/L0/001 mediaType=1/0, sourceType=1, (4288x2848), creationDate=2011-03-13 00:17:25 +0000, location=1, hidden=0, favorite=0 
<PHAsset: 0x7f9c94c17760> B84E8479-475C-4727-A4A4-B77AA9980897/L0/001 mediaType=1/0, sourceType=1, (4288x2848), creationDate=2009-10-09 21:09:20 +0000, location=0, hidden=0, favorite=0 
<PHAsset: 0x7f9c94c18260> 9F983DBA-EC35-42B8-8773-B597CF782EDD/L0/001 mediaType=1/0, sourceType=1, (3000x2002), creationDate=2012-08-08 18:52:11 +0000, location=1, hidden=0, favorite=0 
<PHAsset: 0x7f9c94f13060> 99D53A1F-FEEF-40E1-8BB3-7DD55A43C8B7/L0/001 mediaType=1/0, sourceType=1, (1668x2500), creationDate=2012-08-08 21:29:49 +0000, location=1, hidden=0, favorite=0 
<PHAsset: 0x7f9c94f070a0> ED7AC36B-A150-4C38-BB8C-B6D696F4F2ED/L0/001 mediaType=1/0, sourceType=1, (3000x2002), creationDate=2012-08-08 21:55:30 +0000, location=1, hidden=0, favorite=0 
<PHAsset: 0x7f9c94f02b30> D98C084F-6C45-4E12-90FB-F866C16D290E/L0/001 mediaType=1/0, sourceType=1, (750x1414), creationDate=2017-02-23 10:07:36 +0000, location=0, hidden=0, favorite=0 
Optional("Slo-mo")相冊,共有照片數:0
Optional("Screenshots")相冊,共有照片數:0
Optional("Bursts")相冊,共有照片數:0
Optional("Videos")相冊,共有照片數:0
Optional("Selfies")相冊,共有照片數:0
Optional("Hidden")相冊,共有照片數:0
Optional("Time-lapse")相冊,共有照片數:0
Optional("Recently Added")相冊,共有照片數:1
<PHAsset: 0x7f9c94f0ba80> D98C084F-6C45-4E12-90FB-F866C16D290E/L0/001 mediaType=1/0, sourceType=1, (750x1414), creationDate=2017-02-23 10:07:36 +0000, location=0, hidden=0, favorite=0 

2、列出用戶創建的相冊,並獲取每一個相冊中的PHAsset對象,代碼如下:

    func fetchAllUserCreatedAlbum() -> Void {
        let topLevelUserCollections:PHFetchResult = PHCollectionList.fetchTopLevelUserCollections(with: nil)
        
        //topLevelUserCollections中保存的是各個用戶創建的相冊對應的PHAssetCollection
        print("用戶創建\(topLevelUserCollections.count)個")
        
        for i in 0...topLevelUserCollections.count {
            
            //獲取一個相冊(PHAssetCollection)
            let collection = topLevelUserCollections[i]
            if collection.isKind(of: PHAssetCollection.classForCoder()) {
                
                //類型強制轉換
                let assetCollection = collection as! PHAssetCollection
                
                
                //從每一個智能相冊中獲取到的PHFetchResult中包含的才是真正的資源(PHAsset)
                let assetsFetchResults:PHFetchResult = PHAsset.fetchAssets(in: assetCollection, options: nil)
                
                print("\(assetCollection.localizedTitle)相冊,共有照片數:\(assetsFetchResults.count)")
                
                assetsFetchResults.enumerateObjects({ (asset, i, nil) in
                    //獲取每一個資源(PHAsset)
                    print("\(asset)")
                })
            }
        }
    }

打印結果:

用戶創建0個
2017-02-26 20:56:36.859 PhotoKit[2609:81180] *** Terminating app due to uncaught exception 'NSRangeException', reason: '0x6000000bf560: index (0) beyond bounds (0)'

從PHAssetCollection中獲取到的可以是相冊也可以是資源,但無論是哪種內容,都統一使用PHFetchResult對象封裝起來,因此雖然PHAssetCollection獲取到的可能是多樣的,但通過PHFetchResult就可以使用統一的方法去處理這些內容(遍歷PHFecthResult)。

3、獲取所有資源的集合,並按資源的創建時間排序

    func getAllSourceCollection() -> Array<PHAsset> {
        
        let options:PHFetchOptions = PHFetchOptions.init()
        var assetArray = [PHAsset]()
        options.sortDescriptors = [NSSortDescriptor.init(key: "creationDate", ascending: true)]
        let assetFetchResults:PHFetchResult = PHAsset.fetchAssets(with: options)
        for i in 0..<assetFetchResults.count {
            //獲取一個資源(PHAsset)
            let asset = assetFetchResults[i] 
            
            //添加到數組
            assetArray.append(asset)
        }
        return assetArray
    }

獲取PHAsset對象中的圖片,可以根據不同尺寸來獲取

4、獲取縮略圖方法

    func getAssetThumbnail(asset:PHAsset) -> Void {
        
        //獲取縮略圖
        let manager = PHImageManager.default()
        let option = PHImageRequestOptions() //可以設置圖像的質量、版本、也會有參數控制圖像的裁剪
        option.isSynchronous = true
        manager.requestImage(for: asset, targetSize: CGSize.init(width: screenWidth/4, height: scrrenHeight/4), contentMode: .aspectFit, options: option) { (thumbnailImage, info) in
            
            print("縮略圖:\(thumbnailImage),圖像信息:\(info)")
        }
    }

打印結果: 

縮略圖:Optional(<UIImage: 0x600000282a80> size {60, 40} orientation 0 scale 2.000000),圖像信息:Optional([AnyHashable("PHImageResultDeliveredImageFormatKey"): 4031, AnyHashable("PHImageResultIsDegradedKey"): 0, AnyHashable("PHImageFileOrientationKey"): 0, AnyHashable("PHImageResultWantedImageFormatKey"): 4031])
縮略圖:Optional(<UIImage: 0x60800009ef00> size {60, 40} orientation 0 scale 2.000000),圖像信息:Optional([AnyHashable("PHImageResultDeliveredImageFormatKey"): 4031, AnyHashable("PHImageResultIsDegradedKey"): 0, AnyHashable("PHImageFileOrientationKey"): 0, AnyHashable("PHImageResultWantedImageFormatKey"): 4031])
縮略圖:Optional(<UIImage: 0x600000282260> size {60, 40} orientation 0 scale 2.000000),圖像信息:Optional([AnyHashable("PHImageResultDeliveredImageFormatKey"): 4031, AnyHashable("PHImageResultIsDegradedKey"): 0, AnyHashable("PHImageFileOrientationKey"): 0, AnyHashable("PHImageResultWantedImageFormatKey"): 4031])
縮略圖:Optional(<UIImage: 0x6000002837f0> size {256, 384} orientation 0 scale 1.000000),圖像信息:Optional([AnyHashable("PHImageResultDeliveredImageFormatKey"): 5003, AnyHashable("PHImageResultIsDegradedKey"): 0, AnyHashable("PHImageFileOrientationKey"): 0, AnyHashable("PHImageResultWantedImageFormatKey"): 5003])
縮略圖:Optional(<UIImage: 0x608000096170> size {60, 40} orientation 0 scale 2.000000),圖像信息:Optional([AnyHashable("PHImageResultDeliveredImageFormatKey"): 4031, AnyHashable("PHImageResultIsDegradedKey"): 0, AnyHashable("PHImageFileOrientationKey"): 0, AnyHashable("PHImageResultWantedImageFormatKey"): 4031])
縮略圖:Optional(<UIImage: 0x60800009ba30> size {255, 482} orientation 0 scale 1.000000),圖像信息:Optional([AnyHashable("PHImageResultDeliveredImageFormatKey"): 5003, AnyHashable("PHImageResultIsDegradedKey"): 0, AnyHashable("PHImageFileOrientationKey"): 0, AnyHashable("PHImageResultWantedImageFormatKey"): 5003])
2017-02-26 22:22:04.140065 PhotoKit[3812:131828] subsystem: com.apple.BackBoardServices.fence, category: App, enable_level: 1, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0, enable_private_data: 0

5、獲取原圖的方法

func getAssetOrigin(asset:PHAsset) -> Void {
        
        //獲取原圖
        let manager = PHImageManager.default()
        let option = PHImageRequestOptions() //可以設置圖像的質量、版本、也會有參數控制圖像的裁剪
        option.isSynchronous = true
        manager.requestImage(for: asset, targetSize:PHImageManagerMaximumSize, contentMode: .aspectFit, options: option) { (originImage, info) in
            
            print("原圖:\(originImage),圖像信息:\(info)")
        }
    }

 打印結果:

原圖:Optional(<UIImage: 0x6080000927f0> size {4288, 2848} orientation 0 scale 1.000000),圖像信息:Optional([AnyHashable("PHImageResultIsDegradedKey"): 0, AnyHashable("PHImageFileSandboxExtensionTokenKey"): c7a7c69e701599aee13bb84c1e55a47f91037ae2;00000000;00000000;000000000000001a;com.apple.app-sandbox.read;00000001;01000004;000000000031f4ae;/users/xiayuanquan/library/developer/coresimulator/devices/932eaed5-d4f5-41ee-a100-b59eb278796d/data/media/dcim/100apple/img_0002.jpg, AnyHashable("PHImageFileURLKey"): file:///Users/xiayuanquan/Library/Developer/CoreSimulator/Devices/932EAED5-D4F5-41EE-A100-B59EB278796D/data/Media/DCIM/100APPLE/IMG_0002.JPG, AnyHashable("PHImageResultDeliveredImageFormatKey"): 9999, AnyHashable("PHImageFileUTIKey"): public.jpeg, AnyHashable("PHImageFileOrientationKey"): 0, AnyHashable("PHImageResultOptimizedForSharing"): 0, AnyHashable("PHImageResultWantedImageFormatKey"): 9999, AnyHashable("PHImageResultIsPlaceholderKey"): 0, AnyHashable("PHImageResultIsInCloudKey"): 0])
原圖:Optional(<UIImage: 0x608000091fd0> size {4288, 2848} orientation 0 scale 1.000000),圖像信息:Optional([AnyHashable("PHImageResultIsDegradedKey"): 0, AnyHashable("PHImageFileSandboxExtensionTokenKey"): d728ab2c6e1a21bfa86722cdbc32f929b286bd5a;00000000;00000000;000000000000001a;com.apple.app-sandbox.read;00000001;01000004;000000000031f492;/users/xiayuanquan/library/developer/coresimulator/devices/932eaed5-d4f5-41ee-a100-b59eb278796d/data/media/dcim/100apple/img_0001.jpg, AnyHashable("PHImageFileURLKey"): file:///Users/xiayuanquan/Library/Developer/CoreSimulator/Devices/932EAED5-D4F5-41EE-A100-B59EB278796D/data/Media/DCIM/100APPLE/IMG_0001.JPG, AnyHashable("PHImageResultDeliveredImageFormatKey"): 9999, AnyHashable("PHImageFileUTIKey"): public.jpeg, AnyHashable("PHImageFileOrientationKey"): 0, AnyHashable("PHImageResultOptimizedForSharing"): 0, AnyHashable("PHImageResultWantedImageFormatKey"): 9999, AnyHashable("PHImageResultIsPlaceholderKey"): 0, AnyHashable("PHImageResultIsInCloudKey"): 0])
原圖:Optional(<UIImage: 0x600000098100> size {3000, 2002} orientation 0 scale 1.000000),圖像信息:Optional([AnyHashable("PHImageResultIsDegradedKey"): 0, AnyHashable("PHImageFileSandboxExtensionTokenKey"): 18d6c6a247c87b3f0dc28462a6b962e6291ca8d9;00000000;00000000;000000000000001a;com.apple.app-sandbox.read;00000001;01000004;000000000031f4b8;/users/xiayuanquan/library/developer/coresimulator/devices/932eaed5-d4f5-41ee-a100-b59eb278796d/data/media/dcim/100apple/img_0003.jpg, AnyHashable("PHImageFileURLKey"): file:///Users/xiayuanquan/Library/Developer/CoreSimulator/Devices/932EAED5-D4F5-41EE-A100-B59EB278796D/data/Media/DCIM/100APPLE/IMG_0003.JPG, AnyHashable("PHImageResultDeliveredImageFormatKey"): 9999, AnyHashable("PHImageFileUTIKey"): public.jpeg, AnyHashable("PHImageFileOrientationKey"): 0, AnyHashable("PHImageResultOptimizedForSharing"): 0, AnyHashable("PHImageResultWantedImageFormatKey"): 9999, AnyHashable("PHImageResultIsPlaceholderKey"): 0, AnyHashable("PHImageResultIsInCloudKey"): 0])
原圖:Optional(<UIImage: 0x600000098b50> size {1668, 2500} orientation 0 scale 1.000000),圖像信息:Optional([AnyHashable("PHImageResultIsDegradedKey"): 0, AnyHashable("PHImageFileSandboxExtensionTokenKey"): 10f20330703638d2082f17b525df649aca573913;00000000;00000000;000000000000001a;com.apple.app-sandbox.read;00000001;01000004;000000000031f56b;/users/xiayuanquan/library/developer/coresimulator/devices/932eaed5-d4f5-41ee-a100-b59eb278796d/data/media/dcim/100apple/img_0004.jpg, AnyHashable("PHImageFileURLKey"): file:///Users/xiayuanquan/Library/Developer/CoreSimulator/Devices/932EAED5-D4F5-41EE-A100-B59EB278796D/data/Media/DCIM/100APPLE/IMG_0004.JPG, AnyHashable("PHImageResultDeliveredImageFormatKey"): 9999, AnyHashable("PHImageFileUTIKey"): public.jpeg, AnyHashable("PHImageFileOrientationKey"): 0, AnyHashable("PHImageResultOptimizedForSharing"): 0, AnyHashable("PHImageResultWantedImageFormatKey"): 9999, AnyHashable("PHImageResultIsPlaceholderKey"): 0, AnyHashable("PHImageResultIsInCloudKey"): 0])
原圖:Optional(<UIImage: 0x600000099960> size {3000, 2002} orientation 0 scale 1.000000),圖像信息:Optional([AnyHashable("PHImageResultIsDegradedKey"): 0, AnyHashable("PHImageFileSandboxExtensionTokenKey"): 3f3fee9e75894783e86e2298ca4f6e12379aaa58;00000000;00000000;000000000000001a;com.apple.app-sandbox.read;00000001;01000004;000000000031f5ad;/users/xiayuanquan/library/developer/coresimulator/devices/932eaed5-d4f5-41ee-a100-b59eb278796d/data/media/dcim/100apple/img_0005.jpg, AnyHashable("PHImageFileURLKey"): file:///Users/xiayuanquan/Library/Developer/CoreSimulator/Devices/932EAED5-D4F5-41EE-A100-B59EB278796D/data/Media/DCIM/100APPLE/IMG_0005.JPG, AnyHashable("PHImageResultDeliveredImageFormatKey"): 9999, AnyHashable("PHImageFileUTIKey"): public.jpeg, AnyHashable("PHImageFileOrientationKey"): 0, AnyHashable("PHImageResultOptimizedForSharing"): 0, AnyHashable("PHImageResultWantedImageFormatKey"): 9999, AnyHashable("PHImageResultIsPlaceholderKey"): 0, AnyHashable("PHImageResultIsInCloudKey"): 0])
原圖:Optional(<UIImage: 0x608000092de0> size {750, 1414} orientation 0 scale 1.000000),圖像信息:Optional([AnyHashable("PHImageResultIsDegradedKey"): 0, AnyHashable("PHImageFileSandboxExtensionTokenKey"): f5885747ce5a87a7324c81812f06d3555df44873;00000000;00000000;000000000000001a;com.apple.app-sandbox.read;00000001;01000004;0000000000370949;/users/xiayuanquan/library/developer/coresimulator/devices/932eaed5-d4f5-41ee-a100-b59eb278796d/data/media/dcim/100apple/img_0006.jpg, AnyHashable("PHImageFileURLKey"): file:///Users/xiayuanquan/Library/Developer/CoreSimulator/Devices/932EAED5-D4F5-41EE-A100-B59EB278796D/data/Media/DCIM/100APPLE/IMG_0006.JPG, AnyHashable("PHImageResultDeliveredImageFormatKey"): 9999, AnyHashable("PHImageFileUTIKey"): public.jpeg, AnyHashable("PHImageFileOrientationKey"): 0, AnyHashable("PHImageResultOptimizedForSharing"): 0, AnyHashable("PHImageResultWantedImageFormatKey"): 9999, AnyHashable("PHImageResultIsPlaceholderKey"): 0, AnyHashable("PHImageResultIsInCloudKey"): 0])

 

五、完整的代碼

//
//  ViewController.swift
//  PhotoKit
//
//  Created by 夏遠全 on 2017/2/26.
//  Copyright © 2017年 夏遠全. All rights reserved.
//

import UIKit
import Photos
import PhotosUI

/* 屏幕寬度 */
let screenWidth  = UIScreen.main.bounds.width
/* 屏幕高度 */
let scrrenHeight = UIScreen.main.bounds.height


class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    //四、實例如下
    //1、列出系統所有的相冊,並獲取每一個相冊中的PHAsset對象
    func fetchAllSystemAblum() -> Void {
        let smartAlbums:PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .albumRegular, options: nil)
        print("智能\(smartAlbums.count)個")
        
        //smartAlbums中保存的是各個智能相冊對應的PHAssetCollection
        for i in 0..<smartAlbums.count {
            
            //獲取一個相冊(PHAssetCollection)
            let collection = smartAlbums[i]
            
            if collection.isKind(of: PHAssetCollection.classForCoder()) {
                
                //賦值
                let assetCollection = collection 
                
                //從每一個智能相冊獲取到的PHFetchResult中包含的才是真正的資源(PHAsset)
                let assetsFetchResults:PHFetchResult = PHAsset.fetchAssets(in: assetCollection, options: nil)
                
                print("\(assetCollection.localizedTitle)相冊,共有照片數:\(assetsFetchResults.count)")
                
                assetsFetchResults.enumerateObjects({ (asset, i, nil) in
                    //獲取每一個資源(PHAsset)
                    print("\(asset)")
                })
            }
        }
    }
    
    //2、列出用戶創建的相冊,並獲取每一個相冊中的PHAsset對象,代碼如下:
    func fetchAllUserCreatedAlbum() -> Void {
        let topLevelUserCollections:PHFetchResult = PHCollectionList.fetchTopLevelUserCollections(with: nil)
        
        //topLevelUserCollections中保存的是各個用戶創建的相冊對應的PHAssetCollection
        print("用戶創建\(topLevelUserCollections.count)個")
        
        for i in 0...topLevelUserCollections.count {
            
            //獲取一個相冊(PHAssetCollection)
            let collection = topLevelUserCollections[i]
            if collection.isKind(of: PHAssetCollection.classForCoder()) {
                
                //類型強制轉換
                let assetCollection = collection as! PHAssetCollection
                
                
                //從每一個智能相冊中獲取到的PHFetchResult中包含的才是真正的資源(PHAsset)
                let assetsFetchResults:PHFetchResult = PHAsset.fetchAssets(in: assetCollection, options: nil)
                
                print("\(assetCollection.localizedTitle)相冊,共有照片數:\(assetsFetchResults.count)")
                
                assetsFetchResults.enumerateObjects({ (asset, i, nil) in
                    //獲取每一個資源(PHAsset)
                    print("\(asset)")
                })
            }
        }
    }
    

    //3、獲取所有資源的集合,並按資源的創建時間排序
    func getAllSourceCollection() -> Array<PHAsset> {
        
        let options:PHFetchOptions = PHFetchOptions.init()
        var assetArray = [PHAsset]()
        options.sortDescriptors = [NSSortDescriptor.init(key: "creationDate", ascending: true)]
        let assetFetchResults:PHFetchResult = PHAsset.fetchAssets(with: options)
        for i in 0..<assetFetchResults.count {
            //獲取一個資源(PHAsset)
            let asset = assetFetchResults[i] 
            
            //添加到數組
            assetArray.append(asset)
        }
        return assetArray
    }
    
    
    //4、獲取縮略圖方法
    func getAssetThumbnail(asset:PHAsset) -> Void {
        
        //獲取縮略圖
        let manager = PHImageManager.default()
        let option = PHImageRequestOptions() //可以設置圖像的質量、版本、也會有參數控制圖像的裁剪
        option.isSynchronous = true
        manager.requestImage(for: asset, targetSize: CGSize.init(width: screenWidth/4, height: scrrenHeight/4), contentMode: .aspectFit, options: option) { (thumbnailImage, info) in
            
            print("縮略圖:\(thumbnailImage),圖像信息:\(info)")
        }
    }
    
    //5、獲取原圖的方法
    func getAssetOrigin(asset:PHAsset) -> Void {
        
        //獲取原圖
        let manager = PHImageManager.default()
        let option = PHImageRequestOptions() //可以設置圖像的質量、版本、也會有參數控制圖像的裁剪
        option.isSynchronous = true
        manager.requestImage(for: asset, targetSize:PHImageManagerMaximumSize, contentMode: .aspectFit, options: option) { (originImage, info) in
            
            print("原圖:\(originImage),圖像信息:\(info)")
        }
    }
}
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM