WKWebView CALayer 到图像导出空白图像

2024-04-28

我试图截取网页的屏幕截图,但图像始终为空白(白色)。

我正在使用此代码进行转换CALayer to Data(取自这里) https://stackoverflow.com/a/41387514/4859791

extension CALayer {

/// Get `Data` representation of the layer.
///
/// - Parameters:
///   - fileType: The format of file. Defaults to PNG.
///   - properties: A dictionary that contains key-value pairs specifying image properties.
///
/// - Returns: `Data` for image.

func data(using fileType: NSBitmapImageFileType = .PNG, properties: [String : Any] = [:]) -> Data {
    let width = Int(bounds.width * self.contentsScale)
    let height = Int(bounds.height * self.contentsScale)
    let imageRepresentation = NSBitmapImageRep(bitmapDataPlanes: nil, pixelsWide: width, pixelsHigh: height, bitsPerSample: 8, samplesPerPixel: 4, hasAlpha: true, isPlanar: false, colorSpaceName: NSDeviceRGBColorSpace, bytesPerRow: 0, bitsPerPixel: 0)!
    imageRepresentation.size = bounds.size

    let context = NSGraphicsContext(bitmapImageRep: imageRepresentation)!

    render(in: context.cgContext)

    return imageRepresentation.representation(using: fileType, properties: properties)!
}

}

然后将数据写入文件.png

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) 
{
    let d = web.layer?.data() as NSData?  //web is the instance of WKWebView
    d!.write(toFile: "/Users/mac/Desktop/web.png", atomically: true)
}

但我得到的是一个空白(白色)png,而不是我期望的

1)。我究竟做错了什么?

2)。有没有其他可能的方法来获取图像表示 网页(使用 swift)?

谢谢你!


最新更新:

现在您可以截图WKWebView就像WebView.

苹果添加了新方法 https://developer.apple.com/documentation/webkit/wkwebview/2873260-takesnapshot?changes=latest_minor对于 iOS 和 macOS,

func takeSnapshot(with snapshotConfiguration: WKSnapshotConfiguration?, 
completionHandler: @escaping (NSImage?, Error?) -> Void)

但它仍处于测试阶段。


您无法截取屏幕截图WKWebView。它总是返回空白图像。即使您尝试包括WKWebView在另一个里面NSView并截图,它会给你空白图像代替WKWebView.

你应该使用WebView代替WKWebView为了您的目的。检查这个question https://stackoverflow.com/questions/38191642/saving-webview-to-pdf-returns-blank-image?rq=1.

如果您可以使用私有框架(苹果不允许您的应用程序出现在其商店中),请检查此GitHub https://github.com/lemonmojo/WKWebView-Screenshot。它是用 Obj-C 编写的。我不了解 Obj-C,所以我无法解释该代码中发生的情况。但它声称可以完成这项工作。

你最好的方法是使用WebView并使用您提到的扩展data() on the WebView.

只是一个问题:为什么不使用 phantomJS?

附言。这么晚才回复很抱歉。我没有看到你的电子邮件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WKWebView CALayer 到图像导出空白图像 的相关文章

随机推荐

  • @Page { size:landscape} 过时了吗?

    CSS 规则 page size landscape 应该强制浏览器以横向模式打印页面 stackoverflow 上的许多问题 许多其他编程网站以及参考著作 例如 O Reilly 的 HTML XTHML 权威指南 第五版 中都提到了这
  • 如何计算dropzone中上传的所有文件大小?

    我想计算在 dropzone 中上传的所有选定文件的总大小 例如 如果我选择了 5 个文件 每个文件大小为 2mb 那么 它应该返回 10mb 总大小 我想限制所有文件的总大小是否大于限制 谁能帮我解决这个问题 我真的很困难 您可能需要此功
  • AWS Step Functions 中的直通输入到输出

    我怎样才能将输入传递给TaskAWS Step Functions 中的状态到输出 读完后输入和输出处理 http docs aws amazon com step functions latest dg amazon states lan
  • ORA 00904 错误:无效的标识符

    我已经在虚拟 XP 中安装了 Oracle 10g 并使用以下命令创建了一个表 create table reg1 fname varchar2 30 lname varchar2 30 addr varchar2 30 mail varc
  • selenium 2 Web 驱动程序另存为对话框

    使用 selenium 2 和 webdriver 我的一个脚本需要以 pdf 或 csv 格式保存报告 两者都只会弹出一个另存为对话框 我不知道如何与之互动 我现在正在尝试使用 Firefox 但希望它可以在所有浏览器中运行 我读过 20
  • 防止 ffmpeg 在降低视频分辨率的同时改变颜色强度

    我有一个用例 我需要缩小规模716x1280mp4 视频到358x640 原件的一半 我使用的命令是 ffmpeg i input mp4 vf scale 640 640 force original aspect ratio decre
  • 使用 html 表收集提交表单中的各种数据

    我有一个 jsp 页面 其中包含一个表 分页并带有顺序列 一个搜索字段和其他基于复选框的过滤器 这样 当我单击按钮时 它会采用表格的分页 表格的顺序 搜索字段中的值以及最终的其他参数 复选框 来执行查询 目前 该表具有分页和使用标签库排序的
  • 一对多关系未显示在对象放大架构定义中

    我刚开始将 amplify 与 GraphQL 结合使用 我正在设置数据库模式并在运行放大推送后自动生成函数 我想要实现但不知道如何实现的目标 我希望能够在 getUser 返回的对象中获取用户的所有连接信息 一对一和一对多关系 我希望仍然
  • Windows Phone 8 开始屏幕磁贴大小和边距

    我想知道是否有人知道新的 Windows Phone 8 Startscreen 480x800 的确切尺寸 即边距 顶部 左侧和右侧 图块之间 以及所有三种不同图块尺寸的边缘长度 For 720p 1280 720 and WXGA 12
  • 可以解析Delphi XMLDoc格式并构建在线帮助的工具

    API 文档的 XMLDoc 工具解释如下 http edn embarcadero com article 32770 http edn embarcadero com article 32770 是否有任何免费或商业工具可用于创建基于
  • getActivity() 在我的 ActivityInstrumentationTestCase2 类中返回 null

    我希望我的应用程序使用 ActivityInstrumentationTestCase2 在代码中执行以下测试 问题是 getActivity 方法返回 null 这会导致包含 getActivity 的行正下方的行出现 NullPoint
  • PHP检查字符串是否包含多个单词

    我在互联网上查找了一些可以做到这一点的东西 但它只能用一个词来实现 我正在尝试构建一个脚本来检测我的网站的错误用户名 如果用户名包含数组中的任何单词 则将检测到错误的用户名 这是我编写的代码 但未能运行 bad words array yo
  • 如何在 android 中使用 XML 形状创建向右箭头(V 形)? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 How to create a right facing arrow using xml shapes in android like
  • 如何使用 MvvmCross 创建 MasterDetailPage?

    我正在尝试使用 MvvmCross 开发 Xamarin Forms 应用程序 并且我想使用汉堡菜单 MasterDetailPage 但我不知道该怎么做 我尝试了不同的方法 搜索教程和示例 但没有成功 谁能帮我 正如你在这里看到的Mvvm
  • 使用 OpenFileDialog 选择文件和文件夹

    我做了很多研究来找到这个问题的合适答案 但我失败了 我可以在这里和其他论坛上看到多个问题 但没有明确的答案带来明确的解决方案 我希望 OpenFileDialog 为我选择一个 多个文件 并允许我也选择文件夹 例如 A 多个文件或多个文件夹
  • 在SSIS中导入已合并单元格的Excel

    我的问题是在读取合并 组合列单元格的 Excel 文件时 例如 将下面的excel数据读取到数据库中 Excel 输入 ID NAME DEPT FNAME LNAME 1 Akil Tiwari IT 2 Vinod Rathore IT
  • Shell 脚本对文件进行计数,然后删除最旧的文件

    我是 shell 脚本新手 所以我需要一些帮助 我有一个充满备份的目录 如果我有超过 10 个备份文件 我想删除最旧的文件 以便仅留下 10 个最新的备份文件 到目前为止 我知道如何计算文件数 这看起来很简单 但是如果计数超过 10 我该如
  • 尝试更改冻结标题:有 FB 开发人员吗?

    在过去的几年里 这个问题已经被问过几次了 但正如 Facebook 告诉我的那样 Facebook 工程师积极参与 StackOverflow 所以我希望在这里能得到一些快乐 我们已将视频上传到 YouTube 进行了转发并确保我们对此感到
  • 如何通过特定的行分隔符读取文本文件?

    使用流读取器读取文本文件 using StreamReader sr new StreamReader FileName Encoding Default string line sr ReadLine 我想强制行分隔符应该是 n not
  • WKWebView CALayer 到图像导出空白图像

    我试图截取网页的屏幕截图 但图像始终为空白 白色 我正在使用此代码进行转换CALayer to Data 取自这里 https stackoverflow com a 41387514 4859791 extension CALayer G