使用ALAsset从GRKPhoto创建UIImage

4
我正在使用grabKit,以便允许用户将他们的Instagram、Facebook和本地照片导入我的应用程序。问题出现在当照片是本地照片时。在这种情况下,我使用一种方法,在用户选择照片时可以正常工作。
我找到的标准代码如下:
- (void)picker:(GRKPickerViewController*)picker didSelectPhoto:(GRKPhoto *)photo{
[popover dismissPopoverAnimated:YES];
GRKImage *originalImage = [photo originalImage];
NSLog(@"第一个选定的照片的原始图像URL为:%@", originalImage.URL ); NSLog(@"该图像的大小为:%d x %d ", originalImage.width, originalImage.height );
// 如果url以assets-library://开头 if ( [[originalImage.URL absoluteString] hasPrefix:@"assets-library://"] ){
// 实例化库 ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
// 询问URL的“资产”。资产是照片应用程序中图像的表示。 [library assetForURL:originalImage.URL resultBlock:^(ALAsset *asset) {
// 在这里,我们有了资产,让我们从中检索图像 CGImageRef imgRef = [[asset defaultRepresentation] fullResolutionImage];
// 从CGImage,让我们构建UIImage UIImage * fullResImage = [UIImage imageWithCGImage:imgRef];
NSLog(@"URL %@ 的UIImage是%@", originalImage.URL, fullResImage);
} failureBlock:^(NSError *error) { // 出现了一些错误。 }]; }
通过调试,我发现当我尝试从ALAsset中获取CGImageRef时,应用程序会崩溃,因此在这行代码中:CGImageRef imgRef = [[asset defaultRepresentation] fullResolutionImage];
如果可以帮助解决我的问题,则控制台中显示的消息为:
由于CALayer位置包含NaN:[nan 653],应用程序终止未捕获的异常'CALayerInvalidGeometry'
第一个抛出调用堆栈:
(0x42f8012 0x2ad9e7e 0x42f7deb 0x161ee0b 0x161efa5 0x161f6eb 0x174fe53 0x18191c0 0x181941a 0x21fad 0x219f1 0x13de70 0xf3c03 0x1c0f42f 0x1c21182 0x1c21394 0x2aed705 0x181b93c 0x181b9ac 0x2aed705 0x181b93c 0x181b9ac 0x19d51d3 0x42c0afe 0x42c0a3d 0x429e7c2 0x429df44 0x429de1b 0x3b9d7e3 0x3b9d668 0x170dffc 0x69432 0x30f5) libc++abi.dylib:使用抛出异常终止

感谢您的时间和关注!

1个回答

2
通常,CALayerInvalidGeometryNAN的结果来自于CALayer frame的无效设置,而该frame又可以通过view.frame进行设置。可能是某个地方位置/变换被设置错误了。由于您并没有直接进行操作,所以似乎这是Grabkit的一个bug。请在此处报告问题。
您可以考虑使用F7进入CGImageRef imgRef = [[asset defaultRepresentation] fullResolutionImage];以向Grabkit提供有关崩溃的更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接