我在playground中有以下代码:
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图片。
调整大小
后的图片应为200像素乘以200像素。然而,ciImage
的大小是400像素乘以400像素。事实上,无论我将其调整到什么尺寸,ciImage
始终会加倍。
但是,如果我直接使用original
来创建ciImage
:
let ciImage = CIImage(image: original)
ciImage将为5000x5000像素,而不是加倍。
那么是什么导致了这种加倍?对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
}