2017-12-19 4 views
1

아래 첫 번째 이미지는 원본 이미지입니다.
두 번째 이미지는 Core Image API를 사용하여 구현 된 흐린 이미지입니다.
세 번째 이미지는 UIVisualView을 사용하여 구현 된 흐린 이미지입니다.Core Image API를 사용하여 이미지를 흐리게 만드는 방법은 'UIVisualView'효과와 비슷하게 보입니까?

코어 이미지가 이미지를 흐리게하고 축소 한 것은 분명합니다. 반경이 커지면 흰색 테두리가 더 넓어집니다.

질문 : 핵심 이미지를 사용하는 방법은 UIVisualView 효과처럼 시각적 효과를냅니다.

적어도 코어 이미지를 사용하여 흰색 테두리없이 이미지를 흐리게하는 방법.

func blur(image: UIImage, withRadius radius: Float) -> UIImage { 
    let context = CIContext(options: nil) 
    let image = CIImage(image: image) 

    let filter = CIFilter(name: "CIGaussianBlur") 
    filter?.setValue(image, forKey: kCIInputImageKey) 
    filter?.setValue(radius, forKey: "inputRadius") 
    let result = filter?.outputImage 
    return UIImage(cgImage: context.createCGImage(result!, from: (result?.extent)!)!) 
} 

세번째 이미지 enter image description here

enter image description here

+0

당신은 당신의 대답을 가지고있다. 자, 만약 * 아래에 어떤 일이 일어나고 있는지 더 잘 설명하고 싶다면 "Core Image for Swift"- 특히 3.1 장을 추천합니다. 흰색 경계선이있는 이유와이를 수정하는 방법을 설명합니다. 기본적으로 회선 필터이고 가장자리는 ... 잘 가장자리입니다. – dfd

+0

@dfd 감사합니다. 나는 그것을 점검 할것이다. – JsW

답변

3

enter image description here

func addVisualEffectView() { 
    let effectView = UIVisualEffectView(effect: UIBlurEffect(style:.light)) 
    effectView.frame = originalImageView.bounds // originalImageView is the ImageView represents the original image 
    originalImageView.addSubview(effectView) 
} 
이 나는 ​​시각 효과를보기 같이 흐릿한 영향을받은 사용.

func blurredImage(with sourceImage: UIImage) -> UIImage { 
    // Create our blurred image 
    let context = CIContext(options: nil) 
    let inputImage = CIImage(cgImage: sourceImage.cgImage as! CGImage) 
    // Setting up Gaussian Blur 
    var filter = CIFilter(name: "CIGaussianBlur") 
    filter?.setValue(inputImage, forKey: kCIInputImageKey) 
    filter?.setValue(50.0, forKey: "inputRadius") 
    let result = filter?.value(forKey: kCIOutputImageKey) as? CIImage 

    /* CIGaussianBlur has a tendency to shrink the image a little, this ensures it matches 
    * up exactly to the bounds of our original image */ 

    let cgImage = context.createCGImage(result ?? CIImage(), from: inputImage.extent) 
    let retVal = UIImage(cgImage: cgImage!) 
    return retVal 
} 

CIContext. 핵심 이미지의 모든 처리는 CIContext에서 수행됩니다. 이는 Core Graphics 또는 OpenGL 컨텍스트와 다소 유사합니다.

제공된 CIImage로 컨텍스트에서 createCGImage (from :)를 호출하면 새 CGImage 인스턴스가 반환됩니다.

이 튜토리얼을 이해하는 데 도움이 될 것입니다 : 여기

Core Image Tutorial: Getting Started

는 출력 :

enter image description here

+0

'CIContext.createCGImage (from :)'가 ** key ** 인 이유에 대한 설명을 추가하면 모든 사람들에게 도움이 될 것입니다. 사실, 코드를 제공하는 것 이상의 것을하는 것이 좋을 것입니다! 우리는 단지 코드를 제공하는 것이 아니라 도움을주기 위해 여기에 있습니다. 그 외에는 훌륭한 대답입니다. – dfd

+0

@Faysal 감사합니다! 그리고 dfd. 둘 다 고마워. 이 문제로 인해 오랫동안 혼란 스러웠습니다. – JsW

+0

@dfd UIVisualEffect와 훨씬 비슷할까요? '반경'이 무엇이든 상관없이 흐려진 이미지는 여전히 UIVisualEffect와 조금 다르게 보입니다. – JsW

관련 문제