如何通过代码(在Swift中)从屏幕上截取屏幕截图并保存?我可以截取屏幕截图并将其另存为图像吗?
我已经看过并且看到了这段代码,但是我不能使用它(我认为),因为它什么也没做。
var screen = UIScreen.mainScreen()
snapshotVieww = screen.snapshotViewAfterScreenUpdates(false)
UIGraphicsBeginImageContextWithOptions(screen.bounds.size, false, 0)
snapshotVieww.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
provino = UIImageView(image: image)
使用Swift 4 / iOS 10.3,您可以选择以下方式之一来解决您的问题。
以下代码显示如何拍摄屏幕截图并将其保存在设备相册中:
import UIKit
class ViewController: UIViewController {
/* ... */
@IBAction func screenshot(_ sender: UIBarButtonItem) {
//Create the UIImage
UIGraphicsBeginImageContextWithOptions(view.frame.size, true, 0)
guard let context = UIGraphicsGetCurrentContext() else { return }
view.layer.render(in: context)
guard let image = UIGraphicsGetImageFromCurrentImageContext() else { return }
UIGraphicsEndImageContext()
//Save it to the camera roll
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
}
请注意,此代码的结果将是.JPG图像。另请注意,导航栏和状态栏不会出现在最终图像中。
从iOS 10开始,作为以前代码的替代方法,您可以使用以下代码:
import UIKit
class ViewController: UIViewController {
/* ... */
@IBAction func screenshot(_ sender: UIBarButtonItem) {
//Create the UIImage
let renderer = UIGraphicsImageRenderer(size: view.frame.size)
let image = renderer.image(actions: { context in
view.layer.render(in: context.cgContext)
})
//Save it to the camera roll
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
}
如果要截取包含导航栏(但不包括状态栏)的屏幕截图,则可以使用以下代码:
import UIKit
class ViewController: UIViewController {
/* ... */
@IBAction func screenshot(_ sender: UIBarButtonItem) {
//Create the UIImage
guard let layer = UIApplication.shared.keyWindow?.layer else { return }
UIGraphicsBeginImageContextWithOptions(layer.frame.size, true, 0)
guard let context = UIGraphicsGetCurrentContext() else { return }
layer.render(in: context)
guard let image = UIGraphicsGetImageFromCurrentImageContext() else { return }
UIGraphicsEndImageContext()
//Save it to the camera roll
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
}
从iOS 10开始,作为以前代码的替代方法,您可以使用以下代码:
import UIKit
class ViewController: UIViewController {
/* ... */
@IBAction func screenshot(_ sender: UIBarButtonItem) {
//Create the UIImage
guard let layer = UIApplication.shared.keyWindow?.layer else { return }
let renderer = UIGraphicsImageRenderer(size: layer.frame.size)
let image = renderer.image(actions: { context in
layer.render(in: context.cgContext)
})
//Save it to the camera roll
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
}
从iOS
10开始,为了防止您的应用在调用screenshot(_:)
方法时崩溃,您需要将密钥添加NSPhotoLibraryUsageDescription
到项目的Info.plist文件中:
<key>NSPhotoLibraryUsageDescription</key>
<string>Some description to explain why access is required</string>
我正在使用AlarmManager和Pending Intent调用BroadcastReceiver类。这是每天安排的。 以下是“活动”中调用的BroadCast Receiver类的代码(它是一个单独的类)。 问题陈述是,在此接收器中,我正在打开另一个应用程序,我想捕获屏幕截图并将其上传到服务器。但是窗口功能在广播接收器类中不可用,我无法实现,因为我超出了活动控制。 关键挑战: -在以下类中实
问题内容: 我正在实现一个简单的眼动仪,它需要对屏幕上正在发生的事情进行快速屏幕截图,并同时从网络摄像头捕获视频。 顺便说一句,从网络摄像头检索视频的速度更快,并且返回字节数组,该字节数组的处理速度非常快。 有人知道更快的解决方案吗?可以链接到Java的C ++库也可能会有所帮助。 谢谢! 更新:决定切换到OpenCV,现在正在寻找使用它制作屏幕截图的方法:) 问题答案: 你绝对应该对OpenCV
我的最终目标是能够自动截图。为此,我一直在阅读这篇文章,它说在命令行中应该像下面这样简单: 但是我在当前目录中没有得到任何screenshot.png文件,在我的例子中是C:\temp。我也尝试省略'headless'参数,但唯一发生的事情是,Chrome打开网站,但没有创建文件。 环境:Google Chrome 63.0.3239.132 64位,Windows 10(和服务器2012),Ch
我目前正在使用Espresso对一个Android应用程序进行编程截图。我正在成功地使用 问题是,根据官方浓缩咖啡文档的以下假设: 消息队列为空。 当前没有正在执行任务的AsyncTask实例。 所有开发人员定义的空闲资源都是空闲的。 通过执行这些检查,Espresso大大增加了在任何给定时间只能发生一个UI操作或断言的可能性。此功能为您提供了更可靠和可靠的测试结果。 当运行时,我无法执行任何测试
问题内容: 我为此进行了很多搜索,但找不到解决方案。这是java中可能的解决方案的类似问题。 Python中有类似的解决方案吗? 问题答案: 除了硒以外,此示例还需要PIL映像库。有时将其作为标准库之一放入,有时却不作为,但如果没有,则可以使用 最后输出是… Stackoverflow徽标!!! 当然,现在仅获取静态图像将是过大的选择,但是如果您想要获取需要Javascript才能实现的功能,那可
driver.get_screenshot_as_file('screenshot/go_home.png')