2017-04-20 3 views
1

간단한 필터 앱을 만들고 있습니다. 나는 PNG (PNG는 방향 데이터 플래그가 없음) 인 카메라 롤에서 이미지를로드하고 너비가 너비보다 크면, 이미지에 특정 왜곡 필터를 적용하면 이미지가 회전되어 스스로 표시된다는 것을 발견했습니다 마치 풍경 이미지입니다.높이> 너비 인 경우 PNG에 필터를 적용하면 이미지가 90도 회전합니다. 어떻게 효과적으로 이것을 막을 수 있습니까?

내가 열었던 많은 탭에서 아래의 기술을 온라인 어딘가에 발견했으며 원하는대로 정확하게 수행하는 것으로 보인다. 이미지가 처음로드되었을 때 이미지의 원래 크기와 방향을 사용합니다.

let newImage = UIImage(CIImage:(output), scale: 1.0, orientation: self.origImage.imageOrientation) 

하지만 난 그것을 사용하려고하면이 내가 얻을 경고입니다 : 모든

//global variables  
var image: UIImage! 
var origImage: UIImage! 


func setFilter(action: UIAlertAction) { 


origImage = image 

// make sure we have a valid image before continuing! 

    guard let image = self.imageView.image?.cgImage else { return } 

    let openGLContext = EAGLContext(api: .openGLES3) 
    let context = CIContext(eaglContext: openGLContext!) 
    let ciImage = CIImage(cgImage: image) 

let currentFilter = CIFilter(name: "CIBumpDistortion") 
currentFilter?.setValue(ciImage, forKey: kCIInputImageKey) 

if let output = currentFilter?.value(forKey: kCIOutputImageKey) as? CIImage{ 

//the line below is the one giving me errors which i thought would work. 
    let newImage = UIImage(CIImage:(output), scale: 1.0, orientation: self.image.imageOrientation) 
     self.imageView.image = UIImage(cgImage: context.createCGImage(newImage, from: output.extent)!)} 

필터 :

Ambiguous use of 'init(CIImage:scale:orientation:)' 

여기에 내가 작업을 얻기 위해 노력하고있어 모든 일이 내가 유감 인 이유로 불행하게도 위에서 설명한 이미지를 90도 회전시킵니다.

UIimage의 방향을 확인하고 CIimage를 Uiimage로 변환하고 확장을 사용하여 Ciimage로 다시 변환하거나 UIimage를 imageView로로드하는 등의 다른 방법을 시도했습니다. 산출. 나는 그 과정에 걸린 뒤 걸렸습니다. 나는 단지 특정 이미지를 기본 방향으로 가져 오기 위해 정말 복잡한 것처럼 보였습니다.

모든 조언을 크게 높이세요!

편집 : 나는 방법 내가하려고했던 얻었다을 heres 여기서 When applying a filter to a UIImage the result is upside down

+0

저는 개인적으로이 답변을 사용했습니다 : http://stackoverflow.com/a/41247037/6855532 확장은 깨끗한 접근입니다. – karnett

+0

고맙습니다. 제 CIimage를 다음과 같은 UIimage로 변환 해 보았습니다. let image = UIImage (CIImage : ciimage)가 제공 한 확장자를 사용하면 변환이 'init (CIImage :) error'라는 모호한 사용을하게됩니다. Ciimage를 올바르게 uiimage로 변환하는 방법에 대한 아이디어가 있습니까? – genericguy25

+0

감사합니다. 나는 또한 내가 사용하고있는 CIImage를 uiimage로 변환하는 데 도움이 필요합니다. 어떤 추천? – genericguy25

답변

0

을 내가 답을 발견했다. 가장 큰 문제는 "init (CIImage : scale : orientation :)"의 모호한 사용 "이었습니다.

ciImage가 있어야 할 때 Xcode가 자동으로 코드를 'CIImage : scale : orientation' scale : orientation '매우 모호한 오류로 인해 내 머리를 3 일 동안 긁어내는 것과 같은 새로운 개발자가 남았습니다. (이뿐만 아니라 inits의 CGImage하고있는 UIImage에 대한 사실,하지만 난 그 설명하는 데 사용되는, 그래서 내 원래 오류가 CIImage로했다.)

내 새로운 출력을 위해 아래의 코드를 공식화 할 수 있었다 지식과 :

if let output = currentFilter?.value(forKey: kCIOutputImageKey) as? CIImage{ 

    let outputImage = UIImage(cgImage: context.createCGImage(output, from: output.extent)!) 

    let imageTurned = UIImage(cgImage: outputImage.cgImage!, scale: CGFloat(1.0), orientation: origImage.imageOrientation) 
    centerScrollViewContents() 
    self.imageView.image = imageTurned 
    } 

이 코드는 OP의 if let 출력을 대체합니다.

관련 문제