이미지에 여러 개의 CIFilter를 적용하려고하는데 두 번째 필터를 적용해도 아무런 결과가 나타나지 않습니다. 나는 작물을 만들어 다음과 같은 기능을 회전했습니다createCGImage는 CIFilter를 사용하여 이미지를 회전/자르기 할 때 nil을 반환합니다.
func crop(_ image: CIImage) -> CIImage?{
let cropRectangle = CGRect(x: 0, y: 0, width: 0.5*image.extent.width, height: 0.5*image.extent.height)
guard let filter = CIFilter(name: "CICrop") else {print("Could not create filter.");return nil}
filter.setValue(image, forKey: "inputImage")
filter.setValue(cropRectangle, forKey: "inputRectangle")
return filter.outputImage
}
func rotate(image: CIImage, rotation: CGFloat) -> CIImage?{
guard let filter = CIFilter(name: "CIAffineTransform") else {print("Unable to generate filter");return nil}
let rotationTransform = CGAffineTransform.init(rotationAngle: rotation)
filter.setValue(image, forKey: "inputImage")
filter.setValue(rotationTransform, forKey: "inputTransform")
return filter.outputImage
}
나는 작물 다음 회전을 적용하면, 내 context.createCGImage이 잘 작동하지만 그때 작물을 회전 적용 할 때, 그것은 전무를 반환합니다. CIImage에서 .extension을 확인했는데 자르기 직사각형이 경계 내에 있는지 확인하기 위해 자르기를 시도하고 있습니다. 아이디어를 받아들입니다.
let context = CIContext(options: nil)
guard let ciImage = CIImage(image: #imageLiteral(resourceName: "sample3")) else {fatalError("Error on image generation!")}
guard let ciRotated = self.rotate(image: ciImage, rotation: CGFloat(Double.pi*3/2)) else {print("Could not rotate.");return}
guard let ciCropped = self.crop(ciRotated) else {print("Error cropping.");return}
guard let final = context.createCGImage(ciCropped, from: ciCropped.extent) else {print("Error on CG gen.");return}