用另一张图像遮罩 UIImage 并应用于 PDFPage

问题描述 投票:0回答:1

想知道是否有人有更好的方法作为获取一个 UIImage、对其应用 png 掩码并使用图像初始值设定项初始化 PDFPage 的解决方案。

目前正在工作的是创建两个示例 UIImageView 并使用 UIImageView.mask 属性应用蒙版,然后使用图形上下文渲染示例图像并从中读取“图像”。这似乎是一种非常老套的方法,如果能找到更好的方法就好了。

我们想要这样做的原因是我们的应用程序已经有一个文档阅读器,它具有包括某些手势在内的其他功能。看来最好的方法是回收查看器的使用,而不是重新创建另一个视图来执行完全相同的操作。

这是我尝试使用的 PDFPage 的初始化程序:

if let pdfPage = PDFPage(image: mainImage) {
        
     let pdf = PDFDocument()
        
     pdf.insert(pdfPage, at: 0)
        
     return pdf.dataRepresentation()
 }

- 效果很好,但本质上使用遮罩将两个图像合并在一起就是问题的根源。

let mainImage = UIImage(named: "mainImage")!

let imageView = UIImageView(image: mainImage)

let maskImage = UIImage(named: "mask")!

let maskView = UIImageView(image: maskImage)

imageView.mask = maskView
imageView.setNeedsLayout()
layoutIfNeeded()

maskView.frame = imageView.bounds

- 这是我在 CGContext 中绘制视图并从中返回位图图像的地方。

有更好的方法吗?

swift uiimageview uiimage core-graphics ios-pdfkit
1个回答
0
投票

有很多方法可以获得您想要的结果。

可能最简单和最干净的方法是在图像中使用背景

CGImage
并使用 CGImage 函数 masking(_:)


guard 
    let mainImage = UIImage(named: "mainImage"),
    let maskImage = UIImage(named: "mask") else {
       fatalError("Unable to load images")
    }

let maskedCGImage = mainImage.cgImage.masked(maskImage.cgImage)
let maskedImage = UIImage(cgImage: maskedCGImage)

如果您想使用绘图命令创建图像,现代的方法是使用

UIGraphicsImageRenderer
。这比自己创建屏幕外 CGContext 并渲染到其中更容易、更干净。我记得,您可以使用
UIGraphicsImageRenderer
内容、
UIImage
内容甚至
CGimage
s
CALayer

获取图像
© www.soinside.com 2019 - 2024. All rights reserved.