gpt4 book ai didi

ios - CIImage 将调整后的图像尺寸加倍

转载 作者:行者123 更新时间:2023-11-28 11:43:19 26 4
gpt4 key购买 nike

我在 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 像素 x 5000 像素的黑白 jpg。

resized 图像大小为 200 x 200 像素。然而,ciImage 是 400 x 400 像素。事实上,无论我将其调整到什么大小,ciImage 总是加倍。

但是,如果我只是将 original 制作成 ciImage:

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
}

最佳答案

如果您检查图像的比例,您会注意到 original.scale 可能是 1,而 resized.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
}

关于ios - CIImage 将调整后的图像尺寸加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53122507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com