从UIView获取调整大小的屏幕截图

时间:2011-01-06 11:46:27

标签: iphone image-processing ios4 uiimage

我正在尝试使用以下代码将UIView缩小的屏幕截图缩小为缩略图大小,

    UIGraphicsBeginImageContext(size);
    [canvas.layer renderInContext:UIGraphicsGetCurrentContext()];
    result = [UIGraphicsGetImageFromCurrentImageContext() retain];
    UIGraphicsEndImageContext();

上面的代码将简单地抓住原始未填充大小的视图左上角部分。

我确信我之前已经这样做了,但我无法让它发挥作用。有谁知道这里有什么?

2 个答案:

答案 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()

然而,调整大小的图像采用原始视图控制器的特征集合。 因此,尽管尺寸正确,但某些自动布局功能仍然在最终图像中最终可见。