Как использовать масштабный коэффициент для масштабирования изображения в Swift - PullRequest
0 голосов
/ 23 апреля 2019

Я получил большое изображение с разрешением 1920x1080 пикселей.Я пытаюсь масштабировать изображение двумя разными способами:

Первое: использование CIFilter

    func resize(image: UIImage, scale: Float, aspect: Float = 1) -> UIImage? {
    return autoreleasepool(invoking: {
        [weak self] () -> UIImage? in

        var filter: CIFilter! = CIFilter(name: "CILanczosScaleTransform")!
        filter.setValue(CIImage(image: image), forKey: kCIInputImageKey)
        filter.setValue(NSNumber(value: scale as Float), forKey: kCIInputScaleKey)
        filter.setValue(NSNumber(value: aspect as Float), forKey: kCIInputAspectRatioKey)

        var result: UIImage?
        var cgImage: CGImage? = nil
        if let outputImage = filter.outputImage {
            cgImage = self?.ctx?.createCGImage(outputImage, from: outputImage.extent)
        }
        if let cgImg = cgImage {
            result = self?.convertUIImage(fromCGImage: cgImg)
        }
        if #available(iOS 10.0, *) {
            self?.ctx?.clearCaches()
        }
        cgImage = nil
        filter.setValue(nil, forKey: kCIInputImageKey)
        filter.setValue(nil, forKey: kCIInputScaleKey)
        filter.setValue(nil, forKey: kCIInputAspectRatioKey)
        filter.setDefaults()
        filter = nil
        return result
    })
}

Второе: использование UIImage ()

func scaleImage(scale: CGFloat) -> UIImage? {
        if let cgImage = self.cgImage {
            return UIImage(cgImage: cgImage, scale: scale, orientation: imageOrientation)
        }
        return nil
    }

Но я понял, что коэффициент масштабирования в двух методах дал противоречивые результаты.Например, я установил масштаб, равный 2 Но в первом методе: новое изображение имеет размер (3840x2160), а второе - (960x540).

Я действительно запутался.Может кто-нибудь объяснить мне, почему это произошло? В будущем при использовании новой функции есть параметр scale как узнать, когда масштаб уменьшит мое изображение и наоборот

1 Ответ

0 голосов
/ 23 апреля 2019

По умолчанию изображение имеет масштаб, оно может иметь любое значение. В начале ваш масштаб изображения может быть больше 2, поэтому ваш второй путь ваше изображение получило меньше. Попробуйте это.

func scaleImage(image: UIImage, scale: CGFloat) -> UIImage? {
    let size = CGSize(width: image.size.width * scale, height: image.size.height * scale)
    let drawRect = CGRect(origin: .zero, size: size)

    UIGraphicsBeginImageContextWithOptions(size, false, 0)

    image.draw(in: drawRect)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    return newImage
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...