Ios 将UIImage转换为NSData时保留其掩码

Ios 将UIImage转换为NSData时保留其掩码,ios,objective-c,parse-platform,uiimage,masking,Ios,Objective C,Parse Platform,Uiimage,Masking,我正在开发一个iOS应用程序,它需要解析的个人资料图片是六边形的。现在,我正在从Parse下载PFFile,抓取图像,然后用六边形遮罩它。这适用于简单视图,如个人资料屏幕(只需屏蔽一次),但当使用追随者个人资料图像列表屏蔽集合视图时,应用程序会遇到严重的性能问题 在我看来,最好的解决方案是上传配置文件图片以正确解析已屏蔽的图片,所以我所要做的就是将它们下拉并显示出来。以下是我在注册视图控制器中执行此操作的代码: - (void)imagePickerController:(UIImagePick

我正在开发一个iOS应用程序,它需要解析的个人资料图片是六边形的。现在,我正在从Parse下载PFFile,抓取图像,然后用六边形遮罩它。这适用于简单视图,如个人资料屏幕(只需屏蔽一次),但当使用追随者个人资料图像列表屏蔽集合视图时,应用程序会遇到严重的性能问题

在我看来,最好的解决方案是上传配置文件图片以正确解析已屏蔽的图片,所以我所要做的就是将它们下拉并显示出来。以下是我在注册视图控制器中执行此操作的代码:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

[picker dismissViewControllerAnimated:YES completion:nil];

UIImage *chosenPicture = info[UIImagePickerControllerEditedImage];

[EVNUtility maskImage:chosenPicture withMask:[UIImage imageNamed:@"MaskImage"] withCompletionBlock:^(UIImage *maskedImage) {

    self.profileImageView.image = maskedImage;
    self.pictureData = UIImagePNGRepresentation(maskedImage);

}];

}
图像从我的实用程序函数中正确屏蔽回来,但是,当我使用UIImagePngResentation(或JPG等效工具)将UIImage转换为数据(然后将该数据上载到Parse)时,图像会丢失其屏蔽,并再次变为方形

将UIImage转换为NSData时如何保留掩码?


我试过几种方法,但我猜这是因为我对掩蔽是如何进行的以及它是否会影响基础图像的模糊理解。以下是我用于屏蔽图像的参考:

将包含图像和屏蔽的视图传递给此方法(我使用此方法作为UIImage的扩展)

这将返回“展平”遮罩图像(确保UIView具有清晰的背景)


在创建PFG文件之前,您需要将其转换为PNG(而不是JPG),这将保留透明度。

示例代码中存在一个问题。
newImage
来自哪里?是否确实要将正确的图像传递到
UIImagePNGRepresentation()
?在上面的代码中,您不是。另外,实际屏蔽发生在
evnutability
类方法中的事实稍微掩盖了这个示例。我认为最好向我们展示您用于执行掩蔽的代码。否则,任何答案都只是猜测(并且只是假设你的掩蔽是正确的)。@Todditchendorf
newImage
是一个打字错误,是我为试验另一种解决方案而编写的代码的遗留问题。我已经编辑了我的原始问题。“evnutitility”中的代码是从我在问题末尾发布的链接复制而来的;“profileImageView”正确显示图像,因此我知道当我将其转换为NSData时,遮罩丢失了。效果非常好!在哪里可以了解将UIImage转换为NSData时丢失掩码的原因?这对我来说真的不清楚。你的蒙版UIImage只在运行时被蒙版-即,原始映像在内存中,但有使用蒙版显示的指令。我的方法将可见视图重新采样为新图像。
+ (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;
}