使用 UIImage pngData() 进行 CGImage 掩蔽
CGImage Masking with UIImage pngData()
我正在尝试屏蔽 swift 中的图像。这是我的代码:
(通常,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)!)
}
当我将结果 UIImage
显示到 UIImageView
时,效果很好。但是,当我尝试获取结果 UIImage
的 pngData()
时,图像数据与 originalImg
.
相同
我也尝试从Xcode导出结果图像的pngData()
,但它仍然与originalImg
相同。
图片:https://imgur.com/tEVBWUQ(然后点击'Export...'按钮并另存为png图片)
如何真正 屏蔽图像?
只需将蒙版图像绘制到 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 context or image renderer 中并获得结果图像。
我正在尝试屏蔽 swift 中的图像。这是我的代码:
(通常,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)!)
}
当我将结果 UIImage
显示到 UIImageView
时,效果很好。但是,当我尝试获取结果 UIImage
的 pngData()
时,图像数据与 originalImg
.
我也尝试从Xcode导出结果图像的pngData()
,但它仍然与originalImg
相同。
图片:https://imgur.com/tEVBWUQ(然后点击'Export...'按钮并另存为png图片)
如何真正 屏蔽图像?
只需将蒙版图像绘制到 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 context or image renderer 中并获得结果图像。