Применение фильтров к высоте и ширине подкачки изображений в swift - PullRequest
0 голосов
/ 08 июля 2019

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

enter image description here

Я не могу понять, где я делаю ошибку

  let ciContext = CIContext(options: nil)
    let coreimg = CIImage(image: AppDelegate.captured_iamge!)
    let filter = CIFilter(name: CIFilterNames[indexPath.row])
    filter!.setDefaults()
    filter!.setValue(coreimg, forKey: kCIInputImageKey)
    let filtered_img_data = filter!.value(forKey: kCIOutputImageKey) as! CIImage
    let filtered_img_ref = ciContext.createCGImage(filtered_img_data, from: filtered_img_data.extent)
    let img = UIImage(cgImage: filtered_img_ref!)
    img_view.image = img

, если кто-то может помочь, это будетотлично

1 Ответ

1 голос
/ 09 июля 2019

Скорее всего, это происходит потому, что ваше исходное изображение имеет другую ориентацию (портрет), чем естественную ориентацию вашей камеры (пейзаж).

Если вы спросите UIImage о его размере, он уже учитывает его ориентацию. Однако под капотом данные изображения хранятся в том виде, в котором они поступили с камеры, и это также то, над чем работает Core Image. Таким образом, в вашей цепочке фильтров изображение теряет информацию об ориентации.

Я думаю, вы можете исправить это, передав эту информацию в выходное изображение при создании:

let inputImage = AppDelegate.captured_iamge!
//...
let img = UIImage(cgImage: filtered_img_ref!, scale: inputImage.scale, orientation: inputImage.orientation)
...