我正在转换我们的应用程序使用iOS8的照片框架,ALAsset框架显然是iOS8下的二等公民。 我遇到的一个问题是,我们的架构确实需要一个代表“磁盘”上媒体位置的NSURL。 我们用这个上传媒体到我们的服务器进行进一步处理。 ALAsset很简单: ALAssetRepresentation *rep = [asset defaultRepresentation]; self.originalVideo = rep.url; 但是我只是在PHAsset中看不到这个能力。 我想我可以打电话给: imageManager.requestImageDataForAsset 然后把它写到文件系统中的一个临时位置,但是这看起来非常重量和浪费,更不用说可能很慢了。 有没有办法得到这个,或者我会重构更多的我的应用程序只使用iOS7的NSURLs和一些其他方法的iOS8?
当用户在iOS上的内置Photos.app中对照片进行一些更改(剪裁,消除红眼…)时,这些更改不会应用到由相应的fullResolutionImage返回的ALAssetRepresentation 。 但是,这些更改将应用于由ALAssetRepresentation返回的thumbnail和fullScreenImage 。 此外,关于应用的更改的信息可以通过键@"AdjustmentXMP" ALAssetRepresentation在ALAssetRepresentation元数据字典中find 我想将这些更改应用于fullResolutionImage以保持一致性。 我发现iOS6 + CIFilter的filterArrayFromSerializedXMP: inputImageExtent:error:可以将这个XMP-metadata转换为一个CIFilter数组: ALAssetRepresentation *rep; NSString *xmpString = rep.metadata[@"AdjustmentXMP"]; NSData *xmpData = [xmpString dataUsingEncoding:NSUTF8StringEncoding]; CIImage *image = [CIImage imageWithCGImage:rep.fullResolutionImage]; NSError *error = nil; NSArray *filterArray = [CIFilter filterArrayFromSerializedXMP:xmpData inputImageExtent:image.extent error:&error]; if (error) { NSLog(@"Error during CIFilter creation: %@", [error localizedDescription]); } CIContext *context = [CIContext contextWithOptions:nil]; for […]