天道酬勤,学无止境

photokit

如何知道 PHAssetCollection 是否是最近删除的集合?(How to know if an PHAssetCollection is the recently deleted collection?)

问题 最近添加的集合有一个子类型: PHAssetCollectionSubtypeSmartAlbumRecentlyAdded 。 但是,没有可以标识“最近删除”集合的assetCollectionSubtype 。 这是我的案例中“最近删除”集合的描述: (iOS 8.1.3): DF876BFD-...-C97F4628467C/L0/040 Recently Deleted assetCollectionType=2/1000000201 这表明它是PHAssetCollectionTypeSmartAlbum类型。 但是子类型1000000201到底是什么? 根据文档, 201应该是PHAssetCollectionSubtypeSmartAlbumPanoramas 。 可以相信幻数1000000201永远不会改变吗? 可能不会。 但是,这是检索最近删除的集合的方法: PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:1000000201 options:nil]; 这个特定的智能相册有一个主要区别: PHAsset不能(再次)删除,因为这是垃圾。 因此

2021-09-18 10:31:11    分类:技术分享    cocoa   cocoa-touch   photokit

IOS8. 照片应用程序错误?(IOS8. Photos application bug?)

问题 当我在 IOS8 的标准照片应用程序中使用过滤器时,我无法获得完整的元数据。 我尝试两种方法来获取元数据: [manager requestImageDataForAsset:asset options:options resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) { CIImage *ciimage = [CIImage imageWithData:imageData]; NSMutableDictionary *exif = [NSMutableDictionary dictionary]; [exif addEntriesFromDictionary:ciimage.properties]; }]; [asset requestContentEditingInputWithOptions:editOptions completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) { CIImage *cimage = [CIImage imageWithContentsOfURL

2021-09-14 09:48:49    分类:技术分享    ios   photos   photokit

PHObject localIdentifier reliability

Are there ever circumstances where the localIdentifier could change or not be accurate? I'm working on an application that backs up photos and have been told by my colleagues that the localIdentifier can't be trusted. However, after doing some research I have been unable to find anyone talking about this.

2021-07-13 11:41:13    分类:问答    ios   objective-c   swift   photokit

iOS PhotoKit:获取除全景图以外的所有智能相册(iOS PhotoKit: Fetch all smart albums except panoramas)

问题 我正在使用以下代码获取所有智能相册: PHAssetCollection.fetchAssetCollections(with: PHAssetCollectionType.smartAlbum, subtype: PHAssetCollectionSubtype.albumRegular, options: nil) 如何从此次提取中排除全景智能相册? 我假设我必须使用 options 参数添加一个谓词,但我不知道如何格式化谓词。 回答1 如果您想排除全景图,请考虑使用数组并仅获取您需要的集合。 换句话说,将集合列入白名单。 或者您可以枚举集合并排除全景图。 白名单还使您可以控制集合的顺序。 var smartAlbums: [PHAssetCollection] = [] let subtypes:[PHAssetCollectionSubtype] = [ // all photos collection // .smartAlbumUserLibrary, .smartAlbumFavorites, .smartAlbumPanoramas, .smartAlbumLivePhotos, .smartAlbumBursts, .smartAlbumDepthEffect, .smartAlbumLongExposures, .smartAlbumScreenshots

2021-06-26 01:12:29    分类:技术分享    ios   swift3   photokit

IOS8. Photos application bug?

When I use filters in standard Photos application in IOS8, I can't get full metadata. I try two methods fetch metadata: [manager requestImageDataForAsset:asset options:options resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) { CIImage *ciimage = [CIImage imageWithData:imageData]; NSMutableDictionary *exif = [NSMutableDictionary dictionary]; [exif addEntriesFromDictionary:ciimage.properties]; }]; [asset requestContentEditingInputWithOptions:editOptions completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {

2021-06-25 19:21:34    分类:问答    ios   photos   photokit

Add assets to an iCloud shared photo album programmatically

Are there any limitations on using PhotoKit to add photos to Shared iCloud photo albums? While I can add new photos to AssetCollections that are regular albums, it does not work at all if the AssetCollection represents an iCloud sharing album. Do I also need to add a different type of PHAsset? If I change the fetchAssetCollections call to use .albumRegular instead of .albumCloudShared, the code below works. Otherwise I get an error: The operation couldn't be completed. (PHPhotosErrorDomain error -1.) let sharedAlbums = PHAssetCollection.fetchAssetCollections(with: .album, subtype:

2021-06-25 19:15:18    分类:问答    swift   icloud   photokit

在 AVPlayer 中播放慢动作 AVAsset 的问题(Issue playing slow-mo AVAsset in AVPlayer)

问题 我正在尝试在AVPlayer播放慢动作视频(由用户的 iPhone 拍摄)。 我检索AVAsset与上一个请求PHAsset从选择器: [manager requestAVAssetForVideo:PHAsset options:videoRequestOptions resultHandler:^(AVAsset * avasset, AVAudioMix * audioMix, NSDictionary * info) {}]; 问题是一旦播放,我就会收到此错误: -[AVComposition URL]: unrecognized selector sent to instance 0x138d17f40 但是,如果我在管理器请求上设置此选项,它将以 120/240fps 的速度播放正常速度的视频,并且不会崩溃: videoRequestOptions.version = PHVideoRequestOptionsVersionOriginal; 这是怎么回事? 默认version属性是PHVideoRequestOptionsVersionCurrent ,它包含慢动作、用户编辑和修剪等。 我想播放那个视频版本。 谢谢 回答1 所以事实证明慢动作视频是作为AVComposition传递的。 您可以将其导出到视频文件/URL 中,然后像处理任何其他视频一样处理它。

2021-06-24 05:17:07    分类:技术分享    ios   avfoundation   avplayer   photokit

获取新创建资产的 URL,iOS 9 风格(Get URL of a newly created asset, iOS 9 style)

问题 ALAssetsLibrary这些天已被弃用,但实际上所有关于 SO 的示例仍在使用它。 为了我的目标,我需要知道添加到照片库的视频的 URL,以便我可以将视频分享到 Instagram 应用程序(这是 Instagram 接受视频的唯一方式)。 URL 应该以“assets-library://...”开头 这对于ALAssetsLibrary很简单: ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library writeVideoAtPathToSavedPhotosAlbum:videoFilePath completionBlock:^(NSURL *assetURL, NSError *error) { // ... 上面,URL 作为参数传递给完成块。 但是 iOS 9 与PHPhotoLibrary类和performChanges方法的兼容方式呢? var videoAssetPlaceholder:PHObjectPlaceholder! // property // ... let videoURL = NSBundle.mainBundle().URLForResource("Video_.mp4", withExtension: nil)! let photoLibrary =

2021-06-23 11:05:22    分类:技术分享    ios   swift   alassetslibrary   photokit

使用 Photokit 用元数据写照片(Writing a Photo with Metadata using Photokit)

问题 我目前正在使用 ALAsset 框架将图像从照片库保存到带有元数据的文档目录。 我使用的代码是 ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease]; [library assetForURL:[NSURL URLWithString:miv.assetURL] resultBlock:^(ALAsset *asset) { ALAssetRepresentation *image_representation = [asset defaultRepresentation]; CGImageSourceRef source = Nil; uint8_t *buffer = (Byte*)malloc(image_representation.size); NSUInteger length = [image_representation getBytes:buffer fromOffset: 0.0 length:image_representation.size error:nil]; if (length != 0) { NSData *adata = [[NSData alloc] initWithBytesNoCopy:buffer length:image

2021-06-22 13:16:12    分类:技术分享    ios   objective-c   photokit

使用照片框架从图库上传视频(Upload videos from gallery using Photos framework)

问题 使用照片框架从图库上传视频的最佳方式是什么? 在我使用 ALAssetRepresentation 和下一个方法之前: - (NSUInteger)getBytes:(uint8_t *)buffer fromOffset:(long long)offset length:(NSUInteger)length error:(NSError **)error; 这允许上传文件而无需先将其复制到应用程序临时目录。 在照片框架中看不到任何替代品。 似乎唯一的方法是使用 AVAssetExportSession -> 导出到本地目录 -> 上传,但这需要额外的存储空间(可能是一个问题,如果视频太大) 回答1 似乎唯一有效的办法是要求AVAsset从PHImageManager ,并检查是否返回的资产是AVURLAsset 。 在这种情况下,URL 可用于直接访问文件并获取所需的字节块: [[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) { if ([asset isKindOfClass:[AVURLAsset class]]) {

2021-06-21 21:07:36    分类:技术分享    ios   objective-c   photokit   photosframework