我正在尝试使用 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?我应该对上下文应用比例因子还是其他什么?
我自己想出来了 - UIGraphicsImageRendererFormat 有一个“scale”属性,默认与主屏幕的比例相同。 我必须明确地将比例设置为 1.0 才能获得具有正确 PPI 的图像。
洛根的答案是正确的!
这里是附加信息和代码,可以让您更轻松地解决此问题。当您使用渲染器创建新的 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))
}