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 到图像导出空白图像 的相关文章

  • 如何覆盖应用程序中的内部框架方法(框架外部)

    在 Swift 中子类化时是否有重写内部框架方法 前任 超类 public class BarChartRenderer ChartDataRendererBase internal func drawDataSet context con
  • 在 ARKit 和 RealityKit 中使用 Raycast 的真正好处是什么?

    RealityKit 和 ARKit 中的光线投射有何用途 我什么时候需要使用makeRaycast查询 https developer apple com documentation realitykit arview 3255315 m
  • 快速布尔运算

    这实在令人困惑 有人有什么想法吗 let viewHasMovedToRight false initially I want this to be false then func moveViewToRight sender UIButt
  • 由于“环境错误:[错误 13]:权限被拒绝:'usr/local/bin/f2py'”而无法安装软件包

    我正在尝试在 macOS X 上安装 numpy 但执行命令后pip install numpy我收到错误 环境错误 错误13 权限被拒绝 usr local bin f2py 我如何解决它 这对我有用 pip3 install user
  • Swift 2 OAuth2 LinkedIn 连接

    我将使用 Swift 2 和 Xcode 7 制作一个本机 iOS 应用程序 用户应该使用 LinkedIn 和 OAuth 2 登录 但我想知道应该如何开始设置 我对 OAuth 2 没有太多经验 有好的教程或示例应用程序吗 我看到了雷
  • 在启用滚动的情况下扩展堆栈视图内的 UITextView

    我正在尝试使用自动布局和 Stackview 来实现一些目标 我有一个垂直 Stackview 其中包含 UIView UITextView 和 UIView 如下所示 我已经在这里查看了以前的答案 但找不到一个干净的解决方案来实现此目的
  • 沙盒测试帐户反复询问 iOS 应用内购买的密码

    我用 Swift 语言开发了一个应用程序 我添加了应用内购买来删除广告 我还创建了一个沙箱帐户来测试 但后来我忘记了这个账户的信息 我不确定信息 密码输入屏幕仍然以闪烁的屏幕显示方式显示 即使我重置设备并重新加载它 也没有任何好处 实际上一
  • 在 SwiftUI 中,如何执行手势但将手势转发到其后面的视图?

    我正在创建一个工具提示系统 如果用户触摸工具提示之外的任何地方 我想关闭工具提示 我希望这样在工具提示之外的触摸既可以消除工具提示 又可以激活用户点击的任何控件 因此 您可以打开一个工具提示 然后仍然单击工具提示外部的按钮 并在第一次点击时
  • 使用 Swift 创建 NSAlert

    我有在 Objective C 中创建和 NSAlert 的代码 但我现在想在 Swift 中创建它 该警报旨在确认用户想要删除文档 我想要 删除 按钮来运行删除功能 而 取消 按钮只是为了消除警报 我怎样才能用 Swift 写这个 NSA
  • swift 中闭包和函数作为参数的区别

    我有将近 4 年的 Objective C 经验 并且是 swift 的新手 我试图从 Objective C 的角度理解 swift 的概念 所以如果我错了 请指导我 在目标 c 中 我们有块 可以稍后异步执行的代码块 这绝对是完全合理的
  • 如何在 Safari 上打开本地 html 文件?

    我想打开本地 html 文件Safari集成到我的Swift 3应用 我知道如何使用网址来做到这一点 这是我用来执行此操作的代码 let encodedString url addingPercentEncoding withAllowed
  • 如何快速防止标签中出现孤儿?

    我有一个可以有一两行的标签 如果它有两行 我希望第二行至少有两个 或者可能三个 单词 而不仅仅是一个 关于如何使用 swift 实现这一点有什么想法吗 提前致谢 Daniel 编辑 我删除了我愚蠢的第一个想法 这些想法并没有真正的帮助 好吧
  • SwiftUI 更新主菜单 [已解决] kludgey

    真正的问题 你如何更新mainMenu在 SwiftUI 中 它真的可以工作吗 我在 SwiftUI 中构建了一个基于 MacOS 文档的应用程序 其中包括所有内置的文件菜单命令 即关闭 保存 复制 重命名 等 在保存文档之前 我会验证结构
  • 如何在 swift 中以编程方式使用坐标打开地图应用程序?

    我想在地图应用程序中打开纬度和经度 我尝试了这段代码HERE https stackoverflow com questions 12504294 programmatically open maps app in ios 6 func g
  • 在 64 位 OS X 10.6 上制作胖二进制文件更喜欢 32 位的正确方法?

    假设我问用户 你想在 32 位模式还是 64 位模式下运行 他们选择 32 位 我如何向操作系统注册这一事实 我看过arch http developer apple com mac library documentation Darwin
  • 为什么在 10.5 上我必须在 NSWindowController 上调用 showWindow 两次?

    我有一个 NSWindowController 的子类 我用它从笔尖加载窗口并将其显示在屏幕上 下面是当我想显示窗口时调用的代码 在 10 6 上 当调用 showCustomWindow 时 会显示窗口 但在 10 5 上 必须调用此方法
  • Swift - 将图像插入 PDF 不再适用于 iOS 13

    目前正在开发在我的贷款计算器应用程序上导出 PDF 的功能 我有一个预览屏幕 可以在您保存 PDF 之前显示它 预览屏幕由带有 html 的 webView 组成 其中包含占位符 我能够成功地将图像插入到正确的占位符上 并将其显示在 PDF
  • 如何生成Mac应用程序的安装包?

    如何为 OS X 二进制文件以及一些配置和脚本文件创建单个安装程序包 最终文件夹应如下所示 任何帮助 将不胜感激 谢谢 如果您希望将各种东西放置在不同的位置 安装程序在这里 文档在那里 支持文件在这里等等 它们也非常适合提供安装体验的可配置
  • Cocoa 基于文档的应用程序中的 MVC

    我目前正在对我的应用程序进行重构和重组 我意识到模型和视图及其控制器之间的一些分离已经减少 我希望进行一些清理 我的应用程序中使用了几个关键类 NSPersistentDocument NSWindowController 和模型类 NSP
  • 弱变量中间为零

    弱变量什么时候变为零 weak var backgroundNode SKSpriteNode texture SKTexture image initialBackgroundImage backgroundNode position C

随机推荐

  • @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