转换为 CGImage 时 UIImage 大小加倍?
UIImage size doubled when converted to CGImage?
我试图通过 CGImage
上的 cropping(to:)
方法裁剪使用 iPhone 的相机拍摄的部分图像,但我遇到了一个奇怪的现象,我的 UIImage
的尺寸在使用 .cgImage
转换时翻了一番,这显然阻止了我做我想做的事情。
流量为:
- 图片是用相机拍的,进入全屏imageContainerView
- 此 imageContainerView 的 "screenshot" 是使用 UIView 扩展制作的,有效地将图像调整为容器的尺寸
- 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
我试图通过 CGImage
上的 cropping(to:)
方法裁剪使用 iPhone 的相机拍摄的部分图像,但我遇到了一个奇怪的现象,我的 UIImage
的尺寸在使用 .cgImage
转换时翻了一番,这显然阻止了我做我想做的事情。
流量为:
- 图片是用相机拍的,进入全屏imageContainerView
- 此 imageContainerView 的 "screenshot" 是使用 UIView 扩展制作的,有效地将图像调整为容器的尺寸
- 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