Маскировка CGImage с помощью UIImage pngData () - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь быстро замаскировать изображение.Вот мой код:
(Обычно 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)

Как можноЯ действительно маскирую изображение?

1 Ответ

0 голосов
/ 29 декабря 2018

Просто нарисуйте замаскированное изображение в контекст изображения :

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;
    }

Также вы можете нарисовать изображение в растровом контексте или рендерере изображений и получить результат изображения.

...