Получение черно-белого изображения после нанесения маски - PullRequest
0 голосов
/ 18 мая 2019

Я удаляю фон из изображения, содержащего хотя бы одно человеческое тело. Я применяю маску к UIImage и успешно маскирую изображение, содержащее только человеческое тело с прозрачным фоном, но если я попытался преобразовать обратно в UIImage после применения маски, я получаю черно-белое обрезанное изображение.

Я использую этот фрагмент, чтобы применить маску и получить результат как UIImage

func maskImage(image:UIImage, mask:(UIImage))->UIImage{

        let imageReference = image.cgImage
        let maskReference = mask.cgImage

        let imageMask = CGImage(maskWidth: maskReference!.width,
                                height: maskReference!.height,
                                bitsPerComponent: maskReference!.bitsPerComponent,
                                bitsPerPixel: maskReference!.bitsPerPixel,
                                bytesPerRow: maskReference!.bytesPerRow,
                                provider: maskReference!.dataProvider!, decode: nil, shouldInterpolate: true)

        let maskedReference = imageReference!.masking(imageMask!)

        let maskedImage = UIImage(cgImage:maskedReference!)

        return maskedImage
    }

но я получаю черно-белое изображение только с человеческим телом вместо цветного.

1 Ответ

0 голосов
/ 22 мая 2019

После долгих исследований я наконец-то получил ответ:

UIGraphicsBeginImageContextWithOptions(imgView1.frame.size, _: false, _: 0.0)
    let context = UIGraphicsGetCurrentContext()

    context?.translateBy(x: 0.0, y: (imgView1?.frame.size.height)!)
    context?.scaleBy(x: 1.0, y: -1.0)
    let maskImage = maskImg.cgImage
    context?.clip(to: imgView1!.bounds, mask: maskImage!)
    context?.translateBy(x: 0.0, y: (imgView1?.frame.size.height)!)
    context?.setStrokeColor(UIColor.red.cgColor)
    context?.stroke(imgView1!.frame, width: 15.0)
    context?.scaleBy(x: 1.0, y: -1.0)

    imgView1?.image?.draw(in: imgView1?.bounds ?? CGRect.zero)

    let image: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
...