使用UIImage pngData()

时间:2018-12-29 06:03:28

标签: ios swift image mask masking

我正在尝试快速屏蔽图像。这是我的代码:
(通常,originalImg是从UIImagePickerController加载的图像,然后由UIGraphicsGetImageFromCurrentImageContext()裁剪,并且
makedImage是由用户绘制的图像,由UIGraphicsGetImageFromCurrentImageContext()创建)

func imageMasking(_ originalImg: UIImage, maskImage: UIImage) -> UIImage {
    let cgMaskImage = maskImage.cgImage!
    let mask = CGImage(maskWidth: cgMaskImage.width, height: cgMaskImage.height, bitsPerComponent: cgMaskImage.bitsPerComponent, bitsPerPixel: cgMaskImage.bitsPerPixel, bytesPerRow: cgMaskImage.bytesPerRow, provider: cgMaskImage.dataProvider!, decode: nil, shouldInterpolate: true)!
    return UIImage(cgImage: originalImg.cgImage!.masking(mask)!)
}

当我显示从UIImageUIImageView的结果时,效果很好。但是,当我尝试获取结果pngData()的{​​{1}}时,图像数据与UIImage相同。

我还尝试从Xcode导出结果图像的originalImg,但是它仍然与pngData()相同。

图片:https://imgur.com/tEVBWUQ(然后单击“导出...”按钮并另存为png图片)

我如何真的遮罩图像?

1 个答案:

答案 0 :(得分:0)

只需将遮罩的图像绘制到image context中:

func drawImage(_ image: UIImage) -> UIImage?
    {
        guard let coreImage = image.cgImage else {
            return nil;
        }
        UIGraphicsBeginImageContext(CGSize(width: coreImage.width, height: coreImage.height))
        image.draw(in: CGRect(x: 0.0, y: 0.0, width: coreImage.width, height: coreImage.height))
        let resultImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return resultImage;
    }

您还可以将图像绘制到bitmap contextimage renderer中并获得结果图像。