Tag: phasset

将元数据应用于图像导致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 […]

从Live Photo中提取video部分

有没有人想出如何从现场照片提取video部分? 我正在开发一个应用程序,将Live Photos转换为GIF,第一步是从Live Photo获取video文件。 这似乎应该是可能的,因为如果你插入手机到Mac,你可以看到单独的图像和video文件。 我在提取过程中遇到了一堵砖墙,而且我尝试了很多方法来完成,而且都失败了。 我做的第一件事是通过执行以下操作获取我认为是Live Photovideo部分的PHAsset: if let livePhoto = info["UIImagePickerControllerLivePhoto"] as? PHLivePhoto { let assetResources = PHAssetResource.assetResourcesForLivePhoto(livePhoto) for assetRes in assetResources { if (assetRes.type == .PairedVideo) { let assets = PHAsset.fetchAssetsWithLocalIdentifiers([assetRes.assetLocalIdentifier], options: nil) if let asset = assets.firstObject as? PHAsset { 将PHAsset转换为AVAsset我试过了: asset.requestContentEditingInputWithOptions(nil, completionHandler: { (contentEditingInput, info) -> Void in if let […]

Phasset + AfNetworking上传多个video

目前我正在使用以下代码上传video: NSURLRequest *urlRequest = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:[[entity uploadUrl]absoluteString] parameters:entity.params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [UploadModel getAssetData:entity.asset resultHandler:^(NSData *filedata) { NSString *mimeType =[FileHelper mimeTypeForFileAtUrl:entity.fileUrl]; // NSError *fileappenderror; [formData appendPartWithFileData:filedata name:@"data" fileName: entity.filename mimeType:mimeType]; }]; } error:&urlRequestError]; GetAssetData方法 +(void)getAssetData: (PHAsset*)mPhasset resultHandler:(void(^)(NSData *imageData))dataResponse{ PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init]; options.version = PHVideoRequestOptionsVersionOriginal; [[PHImageManager defaultManager] requestAVAssetForVideo:mPhasset options:options resultHandler:^(AVAsset *asset, AVAudioMix […]

PHAsset获取原始文件名称

我想知道是否有任何方法使用PHAsset获取原始文件名? 我使用下面的代码来提取文件信息。 [[PHImageManager defaultManager] requestImageDataForAsset:asset options:requestOption resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) { entity.fileUrl = [info objectForKey:@"PHImageFileURLKey"]; entity.filename = [[NSFileManager defaultManager] displayNameAtPath:[ entity.fileUrl path]]; }]; 但是,它不会返回原始名称,而是格式为“img_123”的名称,我刚刚检查了官方的苹果文档。 已经引入了一个新的类PHAssetResource和在iOS 9+中可用的属性originalFilename 。 问题是我使用基于Photos框架的图像select器库CTAssetsPickerController ; 它返回PHAsset图像作为PHAsset对象。 PS。 我正在寻找与iOS 8兼容的解决scheme:)。 谢谢!

如何从我的照片stream专辑中获取照片

我想从我的照片stream中获取照片。 我只有PHAsset的localIdentifier。 对于“我的照片stream”专辑以外的照片,我正在使用以下代码检索PHAsset。 [PHAsset fetchAssetsWithLocalIdentifiers:@[“localIdentifier”] options:nil].firstObject localIdentifier就像是“ 1BFC3BA2-AC95-403A-B4FF-B26AFB631581/L0/001 ” 它工作正常。 但是在我的“我的照片stream”相册中,我获得了PHAsset的零值。 有没有人有一个想法如何我们可以从我的照片stream使用PHAsset的localIdentifier值原始照片?

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

每当我尝试使用照片框架保存图像时,我的应用程序崩溃。 -(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 […]

PHAsset + AFNetworking。 无法将file upload到真实设备上的服务器

目前我正在使用下面的代码上传文件到服务器 NSURLRequest *urlRequest = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:[[entity uploadUrl]absoluteString] parameters:entity.params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { // Get file url [UploadModel getAassetUrl:entity.asset resultHandler:^(NSURL *fileUrl) { NSError *fileappenderror; // Append [formData appendPartWithFileURL:fileUrl name:@"data" error:&fileappenderror]; if (fileappenderror) { [Sys MyLog: [fileappenderror localizedDescription] ]; } }]; } error:&urlRequestError]; / * getAassetUrl * / +(void)getAassetUrl: (PHAsset*)mPhasset resultHandler:(void(^)(NSURL *imageUrl))dataResponse{ PHImageRequestOptions * requestOption = […]

如何确定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 […]

连接资产被中断或资产死亡

我从PHAssets加载照片。 当我加载一些图像并将它们传递给另一个视图控制器时,我得到这个错误日志。 我似乎无法find任何关于此的网上。 任何人遇到这个,知道它是什么? 我也遇到这个错误: ***** Error: logging directory does not exist /var/mobile/Library/Logs/CrashReporter/DiagnosticLogs/

如何识别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 […]