Tag: photokit

使用照片框架从图库上传video

使用Photos框架从图库上传video的最佳方式是什么? 在我使用ALAssetRepresentation和下一个方法之前: – (NSUInteger)getBytes:(uint8_t *)buffer fromOffset:(long long)offset length:(NSUInteger)length error:(NSError **)error; 这允许上传文件,而无需先将其复制到应用程序临时目录。 在照片框架中看不到任何替代品。 唯一的办法似乎使用AVAssetExportSession – >导出到本地目录 – >上传,但这需要额外的存储空间(如果video太大可能是一个问题)

在URL中保存图片时出现PHPhotoLibrary错误

我在PHContentEditingOutput提供的URL上创build一个图像。 当我加载数据到UIImage并保存这样 – 它的作品。 [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ NSData *data = [NSData dataWithContentsOfURL:contentEditingOutput.renderedContentURL] UIImage *image = [UIImage imageWithData:data]; [PHAssetChangeRequest creationRequestForAssetFromImage:image]; } completionHandler:^(BOOL success, NSError *error) { … }]; 但是,当我尝试与URL的方法失败: [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:contentEditingOutput.renderedContentURL]; } completionHandler:^(BOOL success, NSError *error) { … }]; 错误: 错误域= NSCocoaErrorDomain代码= -1“操作无法完成。(Cocoa错误-1。)” 更新: 当我尝试保存修改时出现同样的错误。 [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ PHAssetChangeRequest *request = [PHAssetChangeRequest changeRequestForAsset:asset]; […]

使用照片框架将图像保存到照片库

每当我尝试使用照片框架保存图像时,我的应用程序崩溃。 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ _mChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:[info valueForKey:UIImagePickerControllerOriginalImage]]; [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ _mChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:[info valueForKey:UIImagePickerControllerOriginalImage]]; } completionHandler:^(BOOL success, NSError *error) { if (success) { PHObjectPlaceholder *assetPlaceholder = _mChangeRequest.placeholderForCreatedAsset; } else { NSLog(@"write error : %@",error); } }]; } crash : NSInternalInconsistencyException', reason: 'This method can only be called from inside of -[PHPhotoLibrary […]

如何确定PHFetchResult中的PHAsset是否表示已删除的照片?

我试图抓住在iOS 8中使用新的Photos框架拍摄的最后一张照片的缩略图。我现在要做的代码如下: PHFetchOptions *fetchOptions = [PHFetchOptions new]; fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]]; PHFetchResult *assetsInfo = [PHAsset fetchAssetsWithOptions:fetchOptions]; PHImageRequestOptions *requestOptions = [PHImageRequestOptions new]; requestOptions.version = PHImageRequestOptionsVersionCurrent; requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat; [[PHImageManager defaultManager] requestImageForAsset:[assetsInfo objectAtIndex:1] targetSize:CGSizeMake(100, 100) contentMode:PHImageContentModeAspectFill options:requestOptions resultHandler:^(UIImage *result, NSDictionary *info) { if (result) { // galleryButton is just a UIButton in the view [galleryButton setImage:result […]

如何识别PHAsset是否没有完全从iCloud下载(所以我需要再次请求options.networkAccessAllowed)

文档说: PHImageResultIsInCloudKey:一个布尔值,指示照片资产数据是存储在本地设备还是必须从iCloud下载。 (NSNumber)如果是,则不提供图像,因为资产数据必须从iCloud下载。 要下载数据,请提交另一个请求,并为networkAccessAllowed选项指定YES。 但是,当资产存储在iCloud照片库中时,即使已将其完全下载到设备(在我的应用程序中下载,也在照片应用程序中打开它),这个键始终为YES。 如果图像不可用,我想给用户一个下载的可能性(但不要自动执行,至less在没有Wifi的情况下)。 那么如何找出图像是否需要下载? 更好奇的是:当我的requestImageForAsset:targetSize:contentMode:options:resultHandler:结果块被调用,需要下载的图片时,我得到了最后一个调用requestedImage ==零后,一个较小的和退化的版本交付。 在这种情况下,降级是NO,即使我没有图像,图像仍然必须从iCloud下载,因为从应用程序只有一个小的缩略图到目前为止本地可用。 我在iPhone和iPad上testing了不同的iOS 8版本(8.1.x,8.2 beta,8.3 beta),这种行为总是一样的。 一旦我在照片应用程序中打开图像,结果处理程序的最后一次调用具有全尺寸的图像,但PHImageResultIsInCloudKey仍然是YES。 以下是我如何请求图像的一些代码: PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init]; options.deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic; options.networkAccessAllowed = NO; [self.imageManager requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage *requestedImage, NSDictionary *info) { // Checking for requestedImage and the info keys here // When a full sized image was loaded, the […]

如何使用PhotoKit访问慢动作video的NSData / NSURL

使用新的Photo框架,我可以使用requestImageDataForAsset访问PHAssets的NSData 。 我也可以使用返回的info NSDictionary的PHImageFileURLKey来访问文件的URL。 [[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) { //imageData contains the correct data for images and videos NSLog(@"info – %@", info); NSURL* fileURL = [info objectForKey:@"PHImageFileURLKey"]; }]; 这适用于图像和普通video。 但是,当资产是PHAssetMediaSubtypeVideoHighFrameRate(慢动作video)时,返回的数据对应于包含video的第一帧(NSData,dataUTI和info字典指向相同的jpg文件)的JPG文件。 例如,这是为慢动作video返回的URL和dataUTI: PHImageFileURLKey =“file:///var/mobile/Media/PhotoData/Metadata/DCIM/100APPLE/IMG_0642.JPG”; PHImageFileUTIKey =“public.jpeg”; 为什么发生这种情况? 如何访问慢动作videoNSData / NSURL,而不是这个JPG预览?

如何确定iOS8中videoPHAsset的磁盘上的文件大小

我可以使用iOS8中的Photos框架来请求一个videoPHAsset。 我想知道文件在磁盘上有多大。 似乎没有PHAsset的属性来确定这一点。 有没有人有办法解决吗? (不需要使用照片框架)

哪个PHAssetCollection用于保存图像?

在iOS 8的Photos.framework中,我试图将UIImage保存到用户的照片库中,就好像您可以在Safari中长按图片并select“保存图像”一样。 在iOS 7中,只需调用ALAssetLibrary的writeImageToSavedPhotosAlbum:metadata:completionBlock 。 对于iOS 8,我们需要select一个资产集合来添加一个PHAsset,但是我不能确定哪一个PHAssetCollection最接近于保存到用户的“相机胶卷”(尽pipe在iOS中没有一个8) [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ PHAssetChangeRequest *newAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image]; newAssetRequest.creationDate = time; newAssetRequest.location = location; PHObjectPlaceholder *placeholderAsset = newAssetRequest.placeholderForCreatedAsset; PHAssetCollectionChangeRequest *addAssetRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:WHICH_ASSET_COLLECTION]; addAssetRequest addAssets:@[placeholderAsset]; } completionHandler:^(BOOL success, NSError *error) { NSLog(@"Success: %d", success); }]; 我尝试访问“最近添加”的智能相册,但它不允许添加新的内容。

Apple Live照片文件格式

苹果将​​在iOS 9 / iPhone 6s上推出Live Photo 。 文件格式在哪里logging?