转换为CGImage时UIImage大小加倍?

时间:2017-06-10 20:57:55

标签: ios swift uikit cgimage

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

流程是:

  1. 使用相机拍摄照片并进入全屏imageContainerView
  2. 此imageContainerView的“屏幕截图”使用UIView扩展程序,有效地将图像大小调整为容器的尺寸
  3. imageContainerView的.image现在设置为“屏幕截图”
  4. 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
        }
    }
    

    到目前为止,我一直在这里闲逛但没有成功,我很乐意欣赏关于图像尺寸突然加倍的指针或建议。

    提前致谢。

1 个答案:

答案 0 :(得分:2)

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

在iPhone上你正在使用水平和垂直两个像素的外翻点。 UIImage scale属性将为您提供在您的情况下为2的因子。

请参阅此链接iPhone Resolutions