UIImage 转换为 CGImage 时大小增加了一倍?

Her*_*eis 5 uikit cgimage ios swift

我试图通过cropping(to:)a 上的方法裁剪用 iPhone 相机拍摄的图像的一部分CGImage,但我遇到了一个奇怪的现象,在UIImage转换时我的尺寸加倍.cgImage,这显然阻止了我做我想做的事情。

流程是:

  1. 用相机拍摄图片并进入全屏 imageContainerView
  2. 此 imageContainerView 的“屏幕截图”是使用 UIView 扩展制作的,可有效地将图像大小调整为容器的尺寸
  3. imageContainerView.image现在设置为“屏幕截图”

let croppedImage = imageContainerView.renderToImage()
imageContainerView.image = croppedImage
print(imageContainerView.image!.size) //yields (320.0, 568.0)
print(imageContainerView.image!.cgImage!.width, imageContainerView.image!.cgImage!.height) //yields (640, 1136) ??

extension UIView {

    func renderToImage(afterScreenUpdates: Bool = false) -> UIImage {

        let rendererFormat = UIGraphicsImageRendererFormat.default()
        rendererFormat.opaque = isOpaque
        let renderer = UIGraphicsImageRenderer(size: bounds.size, format: rendererFormat)

        let snapshotImage = renderer.image { _ in
            drawHierarchy(in: bounds, afterScreenUpdates: afterScreenUpdates)
        }
        return snapshotImage
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我一直在这里徘徊,但没有成功,并且很乐意感谢有关如何/为什么图像大小突然加倍的指针或建议。

提前致谢。

Uph*_*uth 3

这是因为print(imageContainerView.image!.size)以点为单位打印图像对象的大小,以print(imageContainerView.image!.cgImage!.width, imageContainerView.image!.cgImage!.height)像素为单位打印实际图像的大小。

在您使用的 iPhone 上,水平和垂直方向的每个点都有 2 个像素。UIImage 缩放属性将为您提供因子,在您的情况下该因子将为 2。

请参阅此链接iPhone 分辨率