Ios 部分截图及;图像质量损失
我正在打印一个部分屏幕截图,用于拍摄胶卷、电子邮件、短信、FB、Twitter等。。。选择部分屏幕-顶部100像素,底部100像素 我使用了以下代码:Ios 部分截图及;图像质量损失,ios,swift,image,screenshot,scale,Ios,Swift,Image,Screenshot,Scale,我正在打印一个部分屏幕截图,用于拍摄胶卷、电子邮件、短信、FB、Twitter等。。。选择部分屏幕-顶部100像素,底部100像素 我使用了以下代码: let top: CGFloat = 100 let bottom: CGFloat = 100 let size = CGSize(width: view.frame.size.width, height: view.frame.size.height - top - bottom) UIGraphicsBeginImageContext(
let top: CGFloat = 100
let bottom: CGFloat = 100
let size = CGSize(width: view.frame.size.width, height: view.frame.size.height - top - bottom)
UIGraphicsBeginImageContext(size)
let context = UIGraphicsGetCurrentContext()!
CGContextTranslateCTM(context, 0, -top)
view.layer.renderInContext(context)
let snapshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIImageWriteToSavedPhotosAlbum(snapshot, nil, nil, nil)
结果截图的质量很差
我研究了几个小时,发现有几个人也有类似的问题。我无法完全理解如何修改针对我的问题提供给他们的解决方案
我确实找到了一个半修复。我改变了:
UIGraphicsBeginImageContext(size)
到
这基本上将我的截图放大了2.0倍
这似乎给了我一个更清晰/质量更好的部分屏幕截图,尽管图像比我预期的要大
有没有其他更合适的解决方案
谢谢 问题在于
UIGraphicsBeginImageContext()
创建了一个缩放比例为1.0
的图像上下文,但是您的层(在屏幕上显示时)的缩放比例与设备屏幕的缩放比例相当–很可能高于1.0
因此,您希望使用UIGraphicsBeginImageContextWithOptions()
,正如您所说的那样,但不是为刻度传递2.0
(它可以在2x显示器上工作,但不能在其他显示器上工作),而是传递0.0
要应用于位图的比例因子如果指定值为0.0,则比例因子设置为设备主屏幕的比例因子。
因此,当您执行此操作时,上下文将自动检测屏幕的比例因子,并且图像在您运行它的任何设备上都会显示得非常清晰。Awesome!非常感谢!对于一个普通人(比如我自己),我自然会认为
UIGraphicsBeginImageContext(size)
vsUIGraphicsBeginImageContextWithOptions()
和使用0.0
的结果不会产生任何缩放,会产生相同的结果。显然不是。Terima kasih先生/女士!没问题!是的,UIGraphicsBeginImageContext()
默认情况下使用1.0
的刻度,这是核心图形的许多怪癖之一;)
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size,true,2.0)