gpt4 book ai didi

ios - 使用 drawInRect 调整图像大小,同时保持像 Scale Aspect Fill 这样的纵横比?

转载 作者:IT王子 更新时间:2023-10-29 05:33:47 26 4
gpt4 key购买 nike

我想用 drawInRect 方法调整图像的大小,但我也想保持正确的纵横比,同时完全填充给定的帧(就像 .ScaleAspectFill 对 UIViewContentMode 所做的那样)。有人对此有现成的答案吗?

这是我的代码(非常简单...):

func scaled100Image() -> UIImage {
let newSize = CGSize(width: 100, height: 100)
UIGraphicsBeginImageContext(newSize)
self.pictures[0].drawInRect(CGRect(x: 0, y: 0, width: 100, height: 100))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}

最佳答案

好的,所以没有现成的答案......我为 UIImage 写了一个快速扩展,如果你需要的话可以随意使用它。

这里是:

extension UIImage {
func drawInRectAspectFill(rect: CGRect) {
let targetSize = rect.size
if targetSize == .zero {
self.draw(in: rect)
}
let widthRatio = targetSize.width / self.size.width
let heightRatio = targetSize.height / self.size.height
let scalingFactor = max(widthRatio, heightRatio)
let newSize = CGSize(width: self.size.width * scalingFactor,
height: self.size.height * scalingFactor)
UIGraphicsBeginImageContext(targetSize)
let origin = CGPoint(x: (targetSize.width - newSize.width) / 2,
y: (targetSize.height - newSize.height) / 2)
self.draw(in: CGRect(origin: origin, size: newSize))
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
scaledImage?.draw(in: rect)
}
}

所以在上面的例子中,你可以这样使用它:

self.pictures[0].drawInRectAspectFill(CGRect(x: 0, y: 0, width: 100, height: 100))

关于ios - 使用 drawInRect 调整图像大小,同时保持像 Scale Aspect Fill 这样的纵横比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30525714/

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