以编程方式截图并在Swift中模糊

时间:2014-11-25 03:33:18

标签: ios xcode swift screenshot blur

我想以编程方式从我的应用程序截取屏幕截图并且代码工作正常,但我有一个带模糊效果的UIVisualEffectView,截图给了我没有模糊的图像! 如何让屏幕截图也变得模糊?

UIGraphicsBeginImageContextWithOptions(fullView.bounds.size, true, 1)
self.fullView.layer.renderInContext(UIGraphicsGetCurrentContext())
var viewImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil)

3 个答案:

答案 0 :(得分:3)

要在以编程方式拍摄屏幕图像时保留UIVisualEffectView Blur,您必须拍摄整个屏幕的图像。

以下是Apple提供的更为技术性的定义:

  

许多效果需要来自托管的窗口的支持   UIVisualEffectView。试图仅拍摄快照   UIVisualEffectView将生成一个不包含的快照   影响。拍摄包含a的视图层次结构的快照   UIVisualEffectView,你必须拍摄整个UIWindow或   包含它的UIScreen。 - Apple Documentation

答案 1 :(得分:1)

截取屏幕截图后,可以通过编程方式添加模糊效果。以下是使用GPUImage库的示例,可以使用CocoaPods进行安装。使用原生Apple库也可以实现类似的效果。

GPUImagePicture *picture = [[GPUImagePicture alloc] initWithImage:snapShot];
GPUImageiOSBlurFilter *blurFilter = [[GPUImageiOSBlurFilter alloc] init];
[blurFilter setBlurRadiusInPixels:4];

[picture addTarget:blurFilter];
[blurFilter useNextFrameForImageCapture];
[picture processImage];

UIImage *processed = [blurFilter imageFromCurrentFramebuffer];

答案 2 :(得分:0)

我有同样的问题。我有一个视觉效果(模糊)应用于背景图像和顶部的其他非模糊视图的视图控制器,我想拍摄该控制器的屏幕截图。

正如@ user3721428所强调试图捕获视图不起作用。我很惊讶尝试在上下文中渲染窗口层不起作用。

从UIScreen获取snapshotView的工作原理是什么: let view = UIScreen.main.snapshotView(afterScreenUpdates: true)

然后使用方法like in @neave answer here

从该视图中抓取图像