У меня есть следующий код на детской площадке:
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 - это черно-белый jpg с разрешением 5000 на 5000 пикселей.
Изображение resized
имеет размер 200 на 200 пикселей. Однако ciImage
составляет 400 на 400 пикселей. Фактически, независимо от того, к чему я его изменяю, ciImage
всегда удваивается.
Однако, если я просто сделаю ciImage
из original
:
let ciImage = CIImage(image: original)
размер изображения будет 5000 на 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
}