GPUImage удваивает размер изображения – iOS / Swift

Я пытаюсь преобразовать изображение в оттенки серого, используя GPUImage. Я написал расширение, чтобы выполнить мою работу. В оттенках серого все в порядке. Но выходное изображение увеличилось вдвое. В моем случае мне нужно, чтобы изображение было в точном размере. Может кто-нибудь, пожалуйста, помогите мне в этом? Любая помощь будет высоко оценен.

Это расширение, которое я написал

import UIKit import GPUImage extension UIImage { public func grayscale() -> UIImage?{ var processedImage = self print("1: "+"\(processedImage.size)") let image = GPUImagePicture(image: processedImage) let grayFilter = GPUImageGrayscaleFilter() image?.addTarget(grayFilter) grayFilter.useNextFrameForImageCapture() image?.processImage() processedImage = grayFilter.imageFromCurrentFramebuffer() print("2: "+"\(processedImage.size)") return processedImage } } 

Это вывод в консоли

введите описание изображения здесь

Изменить: я знаю, что изображение может быть изменено позже. Но нужно знать, почему это происходит, и что-то делать, чтобы сохранить размер изображения, поскольку он использует GPUImage.

Попытайтесь масштабировать изображение позже:

 if let cgImage = processedImage.cgImage { //The scale value 2.0 here should be replaced by the original image's scale. let scaledImage = UIImage(cgImage: cgImage, scale: 2.0, orientation: processedImage.imageOrientation) return scaledImage } 

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

 extension UIImage { func grayscale() -> UIImage { let filter = CIFilter(name: "CIPhotoEffectMono") // convert UIImage to CIImage and set as input let ciInput = CIImage(image: self) filter?.setValue(ciInput, forKey: "inputImage") // get output CIImage, render as CGImage first to retain proper UIImage scale let ciOutput = filter?.outputImage let ciContext = CIContext() let cgImage = ciContext.createCGImage(ciOutput!, from: (ciOutput?.extent)!) return UIImage(cgImage: cgImage!) } } 

Источник: https://stackoverflow.com/a/40181589/7842542