UIGraphicsImageRenderer 生成 PPI 不正确的图像

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

我正在尝试使用 UIGraphicsImageRenderer 在上传到我的网络服务器之前修复图像的方向,以下代码可以工作,但它生成的图像的 PPI 比我想要的更高:

        let imageRendererFormat = UIGraphicsImageRendererFormat()
        let imageRenderer = UIGraphicsImageRenderer(size: image.size, format: imageRendererFormat)
        let pngData = imageRenderer.pngData(actions: { context in
            let rect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
            image.draw(in: rect)
        })

生成的图像具有正确的分辨率,但 PPI 为 216,而不是预期的 72。我观察到原始图像的比例为 1.0,但 context.currentImage 的比例为 3.0。我不确定这个 3.0 数字是从哪里来的。不过,这可能解释了 216 PPI,因为 3 x 72 = 216。

如何修复正在渲染的图像的 PPI?我应该对上下文应用比例因子还是其他什么?

ios uiimage uigraphicsimagerenderer
2个回答
3
投票

我自己想出来了 - UIGraphicsImageRendererFormat 有一个“scale”属性,默认与主屏幕的比例相同。 我必须明确地将比例设置为 1.0 才能获得具有正确 PPI 的图像。


0
投票

洛根的答案是正确的!

这里是附加信息和代码,可以让您更轻松地解决此问题。当您使用渲染器创建新的 UIImage 时,默认比例为 3。以下是一些将比例更改为 1.0 的示例代码:

let sourceImage = UUImage(yourImage)

let imageSize = CGSize(width: sourceImage.size.width, height: 
    sourceImage.size.height)

let imageFormat = UIGraphicsImageRendererFormat(for: 
    UITraitCollection(displayScale: 1.0))

let imageRenderer = UIGraphicsImageRenderer(size: imageSize, format: 
    imageFormat)

let newImage = renderer.image { (context) in
    sourceImage.draw(in: CGRect(origin: .zero, size: imageSize))
}
© www.soinside.com 2019 - 2024. All rights reserved.