通过Core Image框架复制结果`func masking_ mask:CGImage-> CGImage?

问题描述

是否可以选择使用CoreImage和func masking(_ mask: CGImage) -> CGImage?之一从Core Graphics复制CIFilter?我尝试过CIBlendWithMaskCIBlendWithAlphaMask都没有成功。最重要的是,我需要保留alpha通道,因此我希望以这种方式对图像进行遮罩,即如果遮罩为黑色->显示图像,如果遮罩为白色->透明。 我的遮罩代码:

extension UIImage {
    
    func masked(by mask: UIImage) -> UIImage {
        guard let maskRef = mask.cgImage,let selfRef = cgImage,let dataProvider = maskRef.dataProvider,let mask = CGImage(
                maskWidth: maskRef.width,height: maskRef.height,bitsPerComponent: maskRef.bitsPerComponent,bitsPerPixel: maskRef.bitsPerPixel,bytesPerRow: maskRef.bytesPerRow,provider: dataProvider,decode: nil,shouldInterpolate: false),let masked = selfRef.masking(mask) else {
                    fatalError("couldnt create mask!")
        }
        let maskedImage = UIImage(cgImage: masked)
        return maskedImage
    }
}

解决方法

我找到了解决方案。关键是要使用具有灰度格式的图像,rgb等将不起作用。如果图像和mak大小相同,则可以取消调整大小步骤。做为扩展名,也可以做为CIImage的子类。享受:)

当然,您可以将其修改为Could not find org.springframework.boot:spring-boot-starter-web:. Required by: project :gps-web-service Possible solution: - Declare repository providing the artifact,see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html UIImageCIImage的扩展名。

CIFilter
,

您需要创建自己的自定义CIFilter。教程:

Apple Docs

Apple Docs 2

Raywenderlich.com Tutorial

这不是微不足道的,但是当您学习如何做到这一点时,它就会有所回报:)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...