gpt4 book ai didi

ios - 收集在两个精确日期之间拍摄的 iPhone 库照片

转载 作者:搜寻专家 更新时间:2023-11-01 07:27:31 25 4
gpt4 key购买 nike

我试图在 swift 中创建一个简单的 Controller ,它允许我从库中收集在两个精确日期之间拍摄的照片,例如 2015 年 2 月 15 日和 2015 年 2 月 18 日。在我的搜索过程中,我阅读了 iOS 的照片框架,我想知道是否有一种简单的方法可以根据上述日期使用这样的框架查询照片库。我还想获取图像元数据,例如地理位置。如果我能用相同的框架做到这一点,那就太好了感谢您的回答

最佳答案

要收集两个日期之间的照片,首先您需要创建代表日期范围开始和结束的 NSDate。这是一个 NSDate 扩展(来自 https://stackoverflow.com/a/24090354/2274694 ),它可以从它们的字符串表示中创建日期:

extension NSDate {
convenience
init(dateString:String) {
let dateStringFormatter = NSDateFormatter()
dateStringFormatter.dateFormat = "MM-dd-yyyy"
dateStringFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
let d = dateStringFormatter.dateFromString(dateString)!
self.init(timeInterval:0, sinceDate:d)
}
}

然后使用 NSDatePHFetchResultPHFetchOptions 创建谓词。

import Photos

class ViewController: UIViewController {

var images:[UIImage] = [] // <-- Array to hold the fetched images

override func viewDidLoad() {
fetchPhotosInRange(NSDate(dateString:"04-06-2015"), endDate: NSDate(dateString:"04-16-2015"))
}

func fetchPhotosInRange(startDate:NSDate, endDate:NSDate) {

let imgManager = PHImageManager.defaultManager()

let requestOptions = PHImageRequestOptions()
requestOptions.synchronous = true
requestOptions.networkAccessAllowed = true

// Fetch the images between the start and end date
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "creationDate > %@ AND creationDate < %@", startDate, endDate)

images = []

if let fetchResult: PHFetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: fetchOptions) {
// If the fetch result isn't empty,
// proceed with the image request
if fetchResult.count > 0 {
// Perform the image request
for var index = 0 ; index < fetchResult.count ; index++ {
let asset = fetchResult.objectAtIndex(index) as! PHAsset
imgManager.requestImageDataForAsset(asset, options: requestOptions, resultHandler: { (imageData: NSData?, dataUTI: String?, orientation: UIImageOrientation, info: [NSObject : AnyObject]?) -> Void in
if let imageData = imageData {
if let image = UIImage(data: imageData) {
// Add the returned image to your array
self.images += [image]
}
}
if self.images.count == fetchResult.count {
// Do something once all the images
// have been fetched. (This if statement
// executes as long as all the images
// are found; but you should also handle
// the case where they're not all found.)
}
})
}
}
}
}
}

针对 Swift 3 更新:

import UIKit
import Photos

class ViewController: UIViewController {

var images:[UIImage] = [] // <-- Array to hold the fetched images

override func viewDidLoad() {
let formatter = DateFormatter()
formatter.dateFormat = "MM-dd-yyyy"
fetchPhotosInRange(startDate: formatter.date(from: "04-06-2015")! as NSDate, endDate: formatter.date(from: "04-16-2015")! as NSDate)
}

func fetchPhotosInRange(startDate:NSDate, endDate:NSDate) {

let imgManager = PHImageManager.default()

let requestOptions = PHImageRequestOptions()
requestOptions.isSynchronous = true
requestOptions.isNetworkAccessAllowed = true

// Fetch the images between the start and end date
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "creationDate > %@ AND creationDate < %@", startDate, endDate)

images = []

let fetchResult: PHFetchResult = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: fetchOptions)
// If the fetch result isn't empty,
// proceed with the image request
if fetchResult.count > 0 {
// Perform the image request
for index in 0 ..< fetchResult.count {
let asset = fetchResult.object(at: index)
imgManager.requestImageData(for: asset, options: requestOptions, resultHandler: { (imageData: Data?, dataUTI: String?, orientation: UIImageOrientation, info: [AnyHashable : Any]?) -> Void in
if let imageData = imageData {
if let image = UIImage(data: imageData) {
// Add the returned image to your array
self.images += [image]
}
}
if self.images.count == fetchResult.count {
// Do something once all the images
// have been fetched. (This if statement
// executes as long as all the images
// are found; but you should also handle
// the case where they're not all found.)
print(self.images)
}
})
}
}
}
}

关于ios - 收集在两个精确日期之间拍摄的 iPhone 库照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35002758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com