画像をすばやくマスクしようとしています。ここに私のコードは次のとおりです
(通常は、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
、うまく機能します。ただし、pngData()
結果を取得しようとするUIImage
と、画像データはと同じになりoriginalImg
ます。
pngData()
結果の画像をXcodeからエクスポートしようとしましたが、それでもoriginalImg
。と同じです。
画像:https://imgur.com/tEVBWUQ(次に[エクスポート...]ボタンをクリックしてpng画像として保存します)
どうすれば本当に画像をマスクできますか?
マスクされた画像を画像コンテキストに描画するだけです:
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;
}
また、画像をビットマップコンテキストまたは画像レンダラーに描画して結果画像を取得することもできます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加