转换为 CGImage 时 UIImage 大小加倍?

UIImage size doubled when converted to CGImage?

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

流量为:

  1. 图片是用相机拍的,进入全屏imageContainerView
  2. 此 imageContainerView 的 "screenshot" 是使用 UIView 扩展制作的,有效地将图像调整为容器的尺寸
  3. imageContainerView 的 .image 现在设置为 "screenshot"

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
    }
}

到目前为止,我一直在这里徘徊,但没有成功,很高兴收到有关 how/why 图像大小突然加倍的指示或建议。

提前致谢。

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

在您使用的 iPhone 上,水平和垂直方向都有 2 个像素用于外翻点。 UIImage scale 属性 将为您提供因子,在您的情况下为 2.

看到这个linkiPhone Resolutions