UIImage到CIImage到UIImage导致pngData在iOS 12上返回nil

问题描述 投票:1回答:1

我有一个从相机拍摄的UIImage。我想进行一些图像操作,因此将其转换为CIImage。CIImage *ciImage = [CIImage imageWithCGImage:snappedImage.CGImage];接下来,我做我的事情,然后将其转换回UIImage:UIImage *image = [UIImage imageWithCIImage:ciImage];如果现在我想将其转换为数据以将其保存到Core Data中,例如:NSData *data = UIImagePNGRepresentation(image);数据最终在iOS 12上为零。(在iOS 13上有效,如果我尝试使用UIImageJPEGRepresentation,也会发生同样的事情)

任何想法为什么以及如何解决此问题?

ios uiimage png core-image
1个回答
0
投票

我看到使用[UIImage imageWithCIImage:] API时出现了许多问题。您会看到,调用此方法时,CIImage实际上不是rendered。结果UIImage仍然只是如何创建结果的“配方”。 UIImage的用户要知道并在需要时触发渲染。 UIImageView似乎知道这一点,但是我发现其他API之间存在很多不一致之处。

您可以做的是使用CIContext并自己进行显式渲染:

// ideally you create this context once and re-use it because it's an expensive object
CIContext* context = [CIContext context];

CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);

NSData* data = [context PNGRepresentationOfImage:ciImage format:kCIFormatBGRA8 colorSpace:colorSpace options:nil];

CGColorSpaceRelease(colorSpace);

这应该在任何iOS版本中均能正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.