【发布时间】:2015-07-01 14:16:48
【问题描述】:
我正在使用 Parse 开发一个 iOS 应用程序,该应用程序要求个人资料图片为六边形。现在,我正在从 Parse 下载 PFFile,抓取该图像,然后用六边形遮盖它。这适用于个人资料屏幕等简单视图(仅需要一次屏蔽),但当使用关注者的个人资料图像列表屏蔽集合视图时,该应用程序会遇到严重的性能问题。
在我看来,最好的解决方案是将已正确屏蔽的个人资料图片上传到 Parse,所以我所要做的就是将它们拉下来并显示它们。这是我以前在注册视图控制器中执行此操作的代码:
- (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);
}];
}
图像从我的实用程序函数中正确返回,但是当我使用 UIImagePNGRepresentation(或 JPG 等价物)将 UIImage 转换为数据(然后将此数据上传到 Parse)时,图像会丢失其掩码并再次变为方形.
将 UIImage 转换为 NSData 时如何保留掩码?
我已经尝试了几件事,但我猜这是由于我对遮罩的完成方式以及它是否会影响底层图像的模糊理解。这是我用来遮罩图像的参考:http://iosdevelopertips.com/cocoa/how-to-mask-an-image.html
【问题讨论】:
-
您的示例代码有问题。
newImage是从哪里来的?您确定将正确的图像传递给UIImagePNGRepresentation()吗?在您上面的代码中,您不是。此外,实际屏蔽发生在您的EVNUtility类方法中的事实使这个示例有点模糊。我认为最好向我们展示您用于执行屏蔽的代码。否则,任何答案都只是猜测(并假设您正确屏蔽)。 -
@ToddDitchendorf
newImage是一个错字,是我为试验另一种解决方案而编写的代码的遗留问题。我已经编辑了我原来的问题。 “EVNUtility”中的代码是从我在问题末尾发布的链接中复制的; 'profileImageView' 正确显示图像,所以我知道将掩码转换为 NSData 时会丢失。
标签: ios objective-c parse-platform uiimage masking