版权声明:转载请标注原文地址。邮箱[email protected] https://blog.csdn.net/Xoxo_x/article/details/80682359
//
// SaveImageTools.swift
// PHPhotoDemo
//
// Created by Quinn_F on 2018/6/13.
// Copyright © 2018年 Quinn. All rights reserved.
//
import UIKit
import Photos
class SaveImageTools: NSObject {
private var assetCollection:PHAssetCollection!
private var albumFound:Bool = false
private var photoAsset:PHFetchResult<AnyObject>!
private var collection: PHAssetCollection!
private var assetCollectionPlaceholder:PHObjectPlaceholder!
private var albumName = "相机"
private var image:UIImage!
static let shared = SaveImageTools()
private override init() {}
func creatAlbum(completed: ((_ error:Error?)->())?) {
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate.init(format: "title = %@", albumName)
let collection : PHFetchResult<PHAssetCollection> = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
if let _ = collection.firstObject{
self.albumFound = true
assetCollection = collection.firstObject
self.saveImage(completed: completed)
}else{
PHPhotoLibrary.shared().performChanges({
let creatAlbumRequest:PHAssetCollectionChangeRequest = PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: self.albumName)
self.assetCollectionPlaceholder = creatAlbumRequest.placeholderForCreatedAssetCollection
}) { (result, error) in
if result{
self.albumFound = result
let collectionFetchResult = PHAssetCollection.fetchAssetCollections(withLocalIdentifiers: [self.assetCollectionPlaceholder.localIdentifier], options: nil)
self.assetCollection = collectionFetchResult.firstObject
self.saveImage(completed: completed)
}else{
completed?(error)
}
}
}
}
private func saveImage(completed: ((_ error:Error?)->())?) {
PHPhotoLibrary.shared().performChanges({
let assetRequest = PHAssetChangeRequest.creationRequestForAsset(from: self.image)
let assetPlaceholder = assetRequest.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest.init(for: self.assetCollection)
albumChangeRequest?.addAssets([assetPlaceholder!] as NSArray)
}) { (result, error) in
completed?(error)
}
}
func saveImage(_ image:UIImage,completed: ((_ error:Error?)->())?) {
self.image = image
creatAlbum(completed: completed)
}
func getImageCollectionFromTitle(_ name:String)->PHAssetCollection?{
let result = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumRegular, options: nil)
var array:[PHAssetCollection] = []
result.enumerateObjects { (collection, index, _) in
array.append(collection)
}
for item in array{
if item.localizedTitle == self.albumName{
return item
}
}
return nil
}
func enumerateAssets(assetCollection: PHAssetCollection?)->[UIImage] {
var containerArr:[UIImage] = []
let options = PHImageRequestOptions()
options.isSynchronous = true
var assets: PHFetchResult<PHAsset>? = nil
if let aCollection = assetCollection {
assets = PHAsset.fetchAssets(in: aCollection, options: nil)
}
assets?.enumerateObjects({ (asset, index, _) in
PHImageManager.default().requestImage(for: asset, targetSize: CGSize.init(width: CGFloat(asset.pixelWidth), height: CGFloat(asset.pixelWidth)), contentMode: .default, options: nil, resultHandler: { (img, info) in
if let img = img {
containerArr.append(img)
}
})
})
return containerArr
}
}