CIImage将大小调整为两倍的图像

时间:2018-11-02 16:32:45

标签: ios swift core-image

我在操场上有以下代码:

import UIKit

var str = "Hello, playground"

func rescaledImage(_ image: UIImage, with newSize: CGSize) -> UIImage {
    let renderer = UIGraphicsImageRenderer(size: newSize)
    let rescaled = renderer.image { _ in
        image.draw(in: CGRect.init(origin: CGPoint.zero, size: newSize))
    }

    return rescaled
}

let original = UIImage(named: "burn.jpg")!

let resized = rescaledImage(original, with: CGSize(width: 200, height: 200))

let ciImage = CIImage(image: resized)

burn.jpg是5000像素乘5000像素的黑白jpg。

resized图片的大小正确为200像素乘200像素。 ciImage是400 x 400像素。实际上,无论我将其调整为什么大小,ciImage总是加倍。

但是,如果我只是从ciImage中赚取original

let ciImage = CIImage(image: original)

ciImage将为5000 x 5000像素,而不是被加倍。

那是什么导致这种倍增? resized图片格式的某种原因一定会导致此问题,但我似乎无法隔离它。

请注意,如果我改用UIGraphicsBeginImageContextWithOptions,也会发生这种情况。

func imageWithImage(image:UIImage, scaledToSize newSize:CGSize) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0);
    image.draw(in: CGRect(origin: CGPoint.zero, size: CGSize(width: newSize.width, height: newSize.height)))
    let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return newImage
}

1 个答案:

答案 0 :(得分:2)

如果检查图像的比例,您会注意到original.scale可能是1,而resize.scale可能是2。

您可以使用UIGraphicsImageRendererFormat设置渲染器的比例,看看是否有帮助。

func rescaledImage(_ image: UIImage, with newSize: CGSize) -> UIImage {
    let format = UIGraphicsImageRendererFormat()
    format.scale = 1
    let renderer = UIGraphicsImageRenderer(size: newSize, format: format)
        let rescaled = renderer.image { _ in
        image.draw(in: CGRect.init(origin: CGPoint.zero, size: newSize))
    }

    return rescaled
}