MRE
import SwiftUI
struct SwiftUIView: View {
func maskImage(image: UIImage, mask: UIImage) -> UIImage {
let imageReference = image.cgImage!
let maskReference = mask.cgImage!
let width = maskReference.width
let height = maskReference.height
let bitsPerComponent = maskReference.bitsPerComponent
let bitsPerPixel = maskReference.bitsPerPixel
let bytesPerRow = maskReference.bytesPerRow
let context = CGContext(
data: nil,
width: width,
height: height,
bitsPerComponent: bitsPerComponent,
bytesPerRow: bytesPerRow,
space: CGColorSpaceCreateDeviceGray(),
bitmapInfo: CGImageAlphaInfo.none.rawValue
)
context!.draw(maskReference, in: CGRect(x: 0, y: 0, width: width, height: height))
let maskImage = context!.makeImage()!
let maskedReference = imageReference.masking(maskImage)!
return UIImage(cgImage: maskedReference)
}
var body: some View {
VStack {
Image(uiImage: maskImage(image: UIImage(named: "uni")!, mask: UIImage(named: "mask")!))
.background(.red)
Image(uiImage: UIImage(data: maskImage(image: UIImage(named: "uni")!, mask: UIImage(named: "mask")!).pngData()!)!)
.background(.red)
}
}
}
此代码屏蔽图像并返回UIImage
您可以在VStack中看到第一个映像是正确的.它显示了遮罩区域后面带有红色背景的遮罩图像.
在VStack的第二张图像中,您可以看到透明度消失了.
因此,我需要做的是将temp.pngData()上传到服务器,并期望能够查看保留了预览代码中所示透明度的PNG文件.但是,当文件被上传时,我得到的是没有透明度的原始文件.
怎么修?