Tag: photokit

在PhotoKit中删除:你可以跳过“最近删除”?

从iOS8开始,当你删除一张照片时,它会进入一个名为“最近删除”的垃圾桶模拟。 当您通过Photos.app或通过PhotoKit API(使用PHAssetChangeRequest.deleteAssets() )删除时,会发生这种情况。 在Photos.app,你可以进入“最近删除”,并真正删除该照片。 有没有办法在PhotoKit中做到这一点?

使用mediaTypevideo从PHAsset修改元数据失败

我尝试使用mediaType == .video从PHAsset添加/修改元数据我发现一些问题mediaType == .video了类似的问题: 如何使用AVAssetWriter更改video元数据? 使用AVFoundation将自定义元数据添加到video 关于这些问题的答案,我构build了以下代码片段,它是PHAsset的扩展: let options = PHVideoRequestOptions() options.version = .original PHImageManager.default().requestAVAsset(forVideo: self, options: options, resultHandler: { asset, audioMix, info in if asset != nil && asset!.isKind(of: AVURLAsset.self) { let urlAsset = asset as! AVURLAsset let start = CMTimeMakeWithSeconds(0.0, 1) let duration = asset!.duration var exportSession = AVAssetExportSession(asset: asset!, presetName: AVAssetExportPresetPassthrough) […]

PHObject localIdentifier可靠性

在什么情况下,localIdentifier可能会改变或不准确? 我正在开发一个备份照片的应用程序,并且已经被同事告知,localIdentifier不可信。 然而,在做了一些研究后,我一直无法find任何人谈论这个。

PhotoKit iOS8 – 使用“PHImageFileURLKey”检索图像

有反正我可以使用从"PHImageFileURLKey"返回的path进入照片库和检索图像? 返回的path是这种格式: "file:///var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG" 我的计划是将这个path存储在数据库中,并在需要取回时使用它来获取图像。 任何帮助表示赞赏。 谢谢!

iOS照片库阅读权限

在用户允许我们访问他的相机胶卷之后。 我们想抓取数据,并从我们的应用程序内部上传到我们的服务。 有没有办法从文件中访问video数据? 打开video文件的唯一方法是创build一个AVAsset。 但这对我来说还不够 我知道了 func requestExportSessionForVideo(_ asset: PHAsset!, options options: PHVideoRequestOptions!, exportPreset exportPreset: String!, resultHandler resultHandler: ((AVAssetExportSession!, [NSObject : AnyObject]!) -> Void)!) -> PHImageRequestID 但在我的情况,我只是想上传video到我不想做的服务: 首先通过导出到我的本地应用程序数据复制video 然后将这些数据发送到我们的服务。 删除数据。 上面的这个方法使用了很多额外的空间和时间,并且用户使用全部16GB的iPhone,它不能很好地工作。 好的,这是我迄今为止使用的URL尝试 var anAcces = sourceURL?.startAccessingSecurityScopedResource if !NSFileManager.defaultManager().fileExistsAtPath(sourceURL!.path!) { NSLog("not exist") } var aFileCoordinator = NSFileCoordinator(filePresenter:nil) var anError: NSError? aFileCoordinator.coordinateReadingItemAtURL(sourceURL!, options:.ForUploading, error:&anError, byAccessor: { (newURL: […]

fetchAssetCollectionsWithType的结果可以在抓取智能相册时sorting吗?

当调用fetchAssetCollectionsWithType时,对于大多数集合types来说,我可以毫无问题地得到正确sorting的结果。 例如: fetchOptions = [[PHFetchOptions alloc] init]; fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"localizedTitle" ascending:YES],]; PHFetchResult *topLevelUserCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:fetchOptions]; 我得到所有相册正确sorting,如果我扭转sorting顺序,我得到相反的结果。 当我为PHAssetCollectionTypeSmartAlbum执行相同的操作时: PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"localizedTitle" ascending:YES],]; PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:fetchOptions]; 结果不会按特定顺序返回,但每次都是相同的顺序。 颠倒顺序或将sorting描述符更改为“endDate”等其他内容对结果没有影响。 我已经validation了这些项目实际上具有这样的属性: for (PHAssetCollection *aSmartAlbum in smartAlbums){ NSLog(@"localizedTitle – %@, estimatedCount – %u", aSmartAlbum.localizedTitle, (int)(aSmartAlbum.estimatedAssetCount […]

仅提取PHAssetMediaTypeImagetypes资产收集typesPHAssetCollectionTypeSmartAlbumtypes的照片

我正在使用照片框架在iOS8中获取相册列表。 我能够使用它 PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; 这给我一个所有的智能相册,包括video列表。 我如何从这个列表中筛选出video。 我只需要图像。 帮助将不胜感激。 谢谢。

将元数据应用于图像导致performChanges请求失败

我正在使用PhotoKit编辑照片,我需要保留原始照片的元数据。 为此,我保存元数据,然后将其提供给CGImageDestinationAddImage的options参数。 我能够最终确定并成功将其写入磁盘,但是当我调用performChanges来提交资源编辑时,它会失败。 如果我提供nil options ,它将成功。 这里怎么了? asset.requestContentEditingInputWithOptions(options) { (input: PHContentEditingInput!, _) -> Void in //get full image let url = input.fullSizeImageURL let inputImage = CIImage(contentsOfURL: url) //get orginal photo's metadata let originalImageData = NSData(contentsOfURL: url)! let imageSource = CGImageSourceCreateWithData(originalImageData, nil) let metadata: CFDictionaryRef = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) println(metadata) //prints all the metadata, yay! //do […]

如何获得iOS8 PhotoKit所需的图像大小?

我使用下面的代码来获取图像: [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(800, 600) contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage *result, NSDictionary *info) { NSLog(@"size:%@",NSStringFromCGSize(result.size)); }]; 我要求的图像尺寸为800 x 600,但我得到的图像尺寸为45 x 60,质量很差。 我怎样才能得到所需的图像大小使用PhotoKit ?

获取新创build的资产的URL,iOS 9样式

ALAssetsLibrary这些日子已被弃用,但实际上所有的例子仍在使用它。 对于我的目标,我需要知道添加到照片库中的video的URL,以便我可以将video分享到Instagram应用(这是Instagram接受video的唯一方式)。 该URL可能应该以“assets-library:// …”开头 ALAssetsLibrary很简单: ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library writeVideoAtPathToSavedPhotosAlbum:videoFilePath completionBlock:^(NSURL *assetURL, NSError *error) { // … 以上,URL作为parameter passing给完成块。 但是,与PHPhotoLibrary类和performChanges方法的iOS 9兼容方式呢? var videoAssetPlaceholder:PHObjectPlaceholder! // property // … let videoURL = NSBundle.mainBundle().URLForResource("Video_.mp4", withExtension: nil)! let photoLibrary = PHPhotoLibrary.sharedPhotoLibrary() photoLibrary.performChanges({ let request = PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(videoURL) self.videoAssetPlaceholder = request?.placeholderForCreatedAsset }, completionHandler: { success, error in if […]