Tag: phasset

来自PHAsset的NSURL

我正在转换我们的应用程序使用iOS8的照片框架,ALAsset框架显然是iOS8下的二等公民。 我遇到的一个问题是,我们的架构确实需要一个代表“磁盘”上媒体位置的NSURL。 我们用这个上传媒体到我们的服务器进行进一步处理。 ALAsset很简单: ALAssetRepresentation *rep = [asset defaultRepresentation]; self.originalVideo = rep.url; 但是我只是在PHAsset中看不到这个能力。 我想我可以打电话给: imageManager.requestImageDataForAsset 然后把它写到文件系统中的一个临时位置,但是这看起来非常重量和浪费,更不用说可能很慢了。 有没有办法得到这个,或者我会重构更多的我的应用程序只使用iOS7的NSURLs和一些其他方法的iOS8?

确定iOS设备上可用的最大PHAsset图像大小

如何确定iOS设备上可用的最大PHAsset图像大小,其中“可用”是指设备上当前的设备,不需要从iCloud Photo Library进行任何networking下载? 我一直在开发一个应用程序,其中缩略图的集合显示在UICollectionView (很像照片应用程序),然后用户可以select一个图像看它的全尺寸。 如有需要,可从iCloud下载完整大小的图像。 但是,我想向用户展示图像的最大可能版本,直到完整大小可用。 照片框架的工作方式相当古怪: 在集合视图中,我使用PHCachingImageManager来caching (以及稍后请求 )具有186×186像素的targetSize的图像(由于视网膜缩放而使UICollectionViewCell尺寸加倍)。 这样做效果很好,滚动速度非常快,并且在填充图像的单元格中没有滞后。 检查返回的图像的大小,他们都是大约342×256像素。 这是在我的iPhone 6上启用了iCloud Photo Library并启用了“优化存储”,因此只有很小的缩略图才能存储在大多数图像的设备上。 然而,奇怪的是,如果我然后请求任何图像的全尺寸(或更大)的版本,使用PHImageRequestOptionsDeliveryMode.Opportunistic选项与PHCachingImageManager或PHImageManager.defaultManager() ,返回的第一个(低质量)图像是一个微小的60×45像素的邮票,看起来可怕的全屏幕,直到最终的全尺寸图像下载,以取代它。 显然,设备上已经有了更大的缩略图(342×256),因为它们刚刚显示在收集视图中! 那么为什么不把它们作为第一个“低质量”的形象归还,直到全尺寸下载? 只是为了确保342×256图像真的已经在设备上,我运行在飞行模式下的代码,所以没有networking访问发生。 我发现,如果我要求任何尺寸高达256×256我会得到342×256图像返回。 一旦我变大(甚至1像素),它会首先返回我60×45图像,然后尝试下载全尺寸的图像。 我已经改变了我的代码,先制作一个256×256的请求,然后用PHImageRequestOptionsDeliveryMode.HighQualityFormat一个完整的请求(不会返回一个微小的中间图像),而且工作的很好。 这也是iOS的照片应用程序必须做什么,因为它显示相对高品质的缩略图,而下载完整的形象。 那么,在这样的背景下,我怎么知道PHAsset最大的设备图像尺寸是PHAsset ? 256×256是一个幻数,还是取决于iCloud Photo Library如何针对空间进行优化(基于库和可用设备存储的大小)? 当然,这似乎是一个照片框架没有返回当前可用的最大图像(当被问及尺寸大于目前的尺寸时)的错误,并且为了获得它的最大尺寸,您必须要求这个尺寸或更小,因为如果你要求更大,你会得到一个60×45的缩影! 离奇。 更新:提交给Apple的错误报告: https : //openradar.appspot.com/25181601 示例项目,演示错误: https : //github.com/mluisbrown/PhotoKitBug

用phimagemanager保存图像到自定义相册?

我正在制作一个应用程序,用AVFoundation拍照,我想将它们保存到自定义相册,然后我可以查询和显示在我的应用程序。 (除非用户需要,否则我不希望在普通照片中包含这些内容)我无法在Swift中find任何显示如何执行此操作的内容。 有没有不同的方式,我应该这样做? 我在SO上find了这个例子,但对我来说没有任何意义,我也无法使它起作用。 func savePhoto() { var albumFound : Bool = false var assetCollection: PHAssetCollection! var photosAsset: PHFetchResult! var assetThumbnailSize:CGSize! // Create the album if does not exist (in viewDidLoad) if let first_Obj:AnyObject = collection.firstObject{ //found the album self.albumFound = true self.assetCollection = collection.firstObject as PHAssetCollection }else{ //Album placeholder for the asset collection, used […]