我正在尝试使用以下代码将UIView缩小的屏幕截图缩小为缩略图大小,
UIGraphicsBeginImageContext(size);
[canvas.layer renderInContext:UIGraphicsGetCurrentContext()];
result = [UIGraphicsGetImageFromCurrentImageContext() retain];
UIGraphicsEndImageContext();
上面的代码将简单地抓住原始未填充大小的视图左上角部分。
我确信我之前已经这样做了,但我无法让它发挥作用。有谁知道这里有什么?
答案 0 :(得分:7)
假设您的CGSize origSize
是原始尺寸(例如768x1024),CGSize size
是所需尺寸,可以这样做:
CGFloat scaleX = size.width / origSize.width;
CGFloat scaleY = size.height / origSize.height;
UIGraphicsBeginImageContextWithOptions(origSize, NO, scaleX > scaleY ? scaleY : scaleX);
[canvas.layer renderInContext:UIGraphicsGetCurrentContext()];
result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
请注意,我们在已开始的上下文中使用origSize
,而不是size
。比例也会影响尺寸。
更新(大约一年后):请注意,此技术会干扰正在拍摄的UIView
上的变换(或受其干扰)。如果上述方法无效并且您正在对视图(或其图层)进行比例变换,您可能需要使用此解决方案:How to scale down a UIImage and make it crispy / sharp at the same time instead of blurry?
答案 1 :(得分:0)
我发现此解决方案会生成大小合适的缩略图。
let thumbRect = CGRect(x: 0, y: 0, width: 512, height: 666)
UIGraphicsBeginImageContext(thumbSize)
let context = UIGraphicsGetCurrentContext()
self.view.frame = thumbRect
self.view.layer.renderInContext(context)
thumbImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
然而,调整大小的图像采用原始视图控制器的特征集合。 因此,尽管尺寸正确,但某些自动布局功能仍然在最终图像中最终可见。