iOS 截图预览 UIImage size incorrect

问题描述 投票:0回答:2

当我截图并抓取自动放置在设备左下角的预览时,我的操作扩展中的图像的高度/宽度除以 3(设备比例),这导致我的应用出现一些问题.我尝试将图像缩放 3 倍,但操作扩展从未打开。

如果我截屏,让预览消失,然后使用相同的照片启动我的动作扩展,但从照片应用程序,一切都按预期进行。

我使用的是 iPhone 14 Pro,期望图像为 1179x2556,比例为 1。相反,我得到的是 393x852,比例为 3。

有谁知道为什么预览图像变小了,或者我如何在我的动作扩展中放大它?

swift uiimage
2个回答
0
投票

原来我需要显式地将比例为 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)

0
投票

无需再次渲染图像。您可以简单地获取图像 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)
© www.soinside.com 2019 - 2024. All rights reserved.