当我截图并抓取自动放置在设备左下角的预览时,我的操作扩展中的图像的高度/宽度除以 3(设备比例),这导致我的应用出现一些问题.我尝试将图像缩放 3 倍,但操作扩展从未打开。
如果我截屏,让预览消失,然后使用相同的照片启动我的动作扩展,但从照片应用程序,一切都按预期进行。
我使用的是 iPhone 14 Pro,期望图像为 1179x2556,比例为 1。相反,我得到的是 393x852,比例为 3。
有谁知道为什么预览图像变小了,或者我如何在我的动作扩展中放大它?
原来我需要显式地将比例为 1 的 UIGraphicsImageRendererFormat 传递给 UIGraphicsImageRenderer。然后将图像大小乘以图像比例按预期工作。
extension UIImage {
func resized(to size: CGSize) -> UIImage {
let format = UIGraphicsImageRendererFormat()
format.scale = 1
return UIGraphicsImageRenderer(size: size, format: format).image { _ in
draw(in: CGRect(origin: .zero, size: size))
}
}
}
let size = CGSize(
width: image.size.width * image.scale,
height: image.size.height * image.scale
)
let screenshot = image.resized(to: size)
无需再次渲染图像。您可以简单地获取图像 cgImage 并在从中初始化新的 UIImage 时设置不同的比例。像这样的东西:
extension UIImage {
func settingScale(to scale: CGFloat) -> UIImage? {
guard let cgImage else { return nil }
return .init(
cgImage: cgImage,
scale: scale,
orientation: imageOrientation
)
}
}
用法:
let screenshot = image.settingScale(to: 1)