UIVisualEffectView размытое изображение - PullRequest
0 голосов
/ 28 августа 2018

Я использую UIVisualEffectView, чтобы размыть изображение. Чем я использую этот код, чтобы преобразовать его в изображение и сохранить в библиотеке изображений.

 UIGraphicsBeginImageContextWithOptions(imageContainerView.bounds.size, true, 1)
 imageContainerView.drawHierarchy(in: imageContainerView.bounds, afterScreenUpdates: true)
 let newImage = UIGraphicsGetImageFromCurrentImageContext()!
 UIGraphicsEndImageContext()

imageContainerView - это представление, которое содержит imageview и UIVisualEffectView.

Перед тем, как преобразовать imageContainerView в изображение, я увеличиваю его размер до 2000x2000, чтобы получить изображение высокого качества. Если я не сделаю этого, все изображения внутри imageContainerView станут пиксельными.

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

Можете ли вы предложить решение этой проблемы? Я просто хочу получить размытое изображение, поэтому, если вы знаете другой способ размытия изображения с помощью ползунка (код размытия должен работать быстро, чтобы пользовательский интерфейс не зависал), скажите, пожалуйста.

1 Ответ

0 голосов
/ 28 августа 2018

Я просто хочу получить размытое изображение

Хорошо, вы можете реализовать некоторые из эффектов фильтра размытия, например, этот, и ползунок к нему.

var context = CIContext(options: nil)

func blur() {

    let blurFilter = CIFilter(name: "CIGaussianBlur") 
    let beginImage = CIImage(image: YOURIMAGE!)
    blurFilter!.setValue(beginImage, forKey: kCIInputImageKey)
    blurFilter!.setValue(8, forKey: kCIInputRadiusKey)

    let cropFilter = CIFilter(name: "CICrop")
    cropFilter!.setValue(blurFilter!.outputImage, forKey: kCIInputImageKey)
    cropFilter!.setValue(CIVector(cgRect: beginImage!.extent), forKey: "inputRectangle")

    let output = cropFilter!.outputImage 
    let cgImg = context.createCGImage(output!, from: output!.extent)
    let processedImage = UIImage(cgImage: cg cgImg mg!)
    bg.image = processedImage
}

Или на GitHub есть несколько таких библиотек, например: https://github.com/FlexMonkey/Blurable

...