如何使用透明背景的画布获取 CSS 样式元素的 png 图像?

2023-11-23

我想使用 CSS 为网页上的元素设置样式,然后将该元素用作静态 png。是否可以在例如上绘制html节点。画布并将此类透明图像保存到文件中?

我想找到一种方法,使用 CSS 获取现有的 HTML 并将其渲染为 PNG 文件并保持透明度。


将 HTML 元素保存到图像需要一个复杂的答案!

首先,出于非常好的安全原因,浏览器不允许 HTML 元素的同一页面成像。想象一下,例如,一个恶意脚本采用包含您的银行用户名+密码的 HTML 输入表单,并将其转换为图像并将该图像发送给小偷,这可不好!

因此,IE 简单地阻止同一页面的 HTML 元素成像——期间。

Chrome 和火狐浏览器might还有一个功能(bug?!),允许您将 HTML 元素转换为图像,如下所示: 1. 使用“foreignObject”将 HTML 元素嵌入到 SVG 元素中。 2. 将 SVG 元素绘制到 Canvas 元素中。 3. 使用canvas.toDataURL(‘image/png’)获取表示png图像的编码字符串。

由于看起来您可以控制 HTML 样式,因此您可以通过使用“无头”HTML 生成器(如 PhantomJs.org (phantomjs.org))获得完整的解决方案。您可以使用 Phantomjs 生成 HTML 元素并设置其样式。然后,PhantomJs 有一个光栅化器,您可以使用该光栅器将该元素转换为图像。另外,如果您可以提供一个包含以下内容的网页:only您需要的样式化 HTML,那么这 1 行 PhantomJs 代码将为您提供该页面的 png:

phantomjs rasterize.js http://myHtmlOnMyPage.html myHtmlImage.png

Chrome/Firefox 代码可在此处找到:https://developer.mozilla.org/en-US/docs/HTML/Canvas/Drawing_DOM_objects_into_a_canvas

看起来像这样:

<!DOCTYPE html>
<html>
<body>
<p><canvas id="canvas" style="border:2px solid black;" width="200" height="200"></canvas>
<script>
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var data = "<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'>" +
             "<foreignObject width='100%' height='100%'>" +
               "<div xmlns='http://www.w3.org/1999/xhtml' style='font-size:40px'>" +
                 "<em>I</em> like <span style='color:white; text-shadow:0 0 2px blue;'>cheese</span>" +
               "</div>" +
             "</foreignObject>" +
           "</svg>";
var DOMURL = self.URL || self.webkitURL || self;
var img = new Image();
var svg = new Blob([data], {type: "image/svg+xml;charset=utf-8"});
var url = DOMURL.createObjectURL(svg);
img.onload = function() {
    ctx.drawImage(img, 0, 0);
    DOMURL.revokeObjectURL(url);
};
img.src = url;
</script>
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用透明背景的画布获取 CSS 样式元素的 png 图像? 的相关文章

随机推荐

  • ARM 未对齐内存访问解决方法

    我必须将源代码移植到运行 Linux 的 ARM 平台 不幸的是我遇到了未对齐的内存访问问题 源代码大量使用指针转换和访问 像下面这样的代码已经像病毒一样在代码库中传播 多亏了 gcc 我可以查明有问题的位置 Wcast align命令行选
  • scipy.io.wavfile.read 无法读取 24 位 .wav 文件

    看起来scipy io wavfile read无法读取 24 位 wav 文件 您知道如何处理它们吗 如果您的 wav 文件未压缩 您可以尝试readwav函数在这里 https gist github com WarrenWeckess
  • WordPress:媒体库网格模式无限加载

    所以这个问题很奇怪 因为对我来说 Wordpress 媒体库在仅网格模式下的 WordPress 管理菜单中不起作用 这是非常奇怪的问题 因为这个问题仅发生在 1 个帐户上 这将是昨天我尝试上传一堆的帐户 将图片添加到媒体库后出现错误 稍后
  • 计算可能的“蛇”密码

    我们都知道移动设备上的新密码屏幕 它由要连接的点矩阵组成 唯一的密码是点的向量 这些点可以连接到自身 但有以下限制 一个点只能连接到另外 1 个点 如果目标点和空闲点在同一条线上 则线路将被迫连接到更近的点 一个例子 由于之前没有连接中间点
  • ClojureScript 不需要 Clojure 的 defstruct 背后的原因是什么?

    defstructClojureScript 不支持 这似乎是设计使然 现在这可能实际上是 Clojure 语言中已弃用的部分 ClojureScript 的设计者只是希望每个人都继续前进 但这只是我的猜测 我的问题是 ClojureScr
  • MATLAB:使用“-append”标志时,将多个变量保存到“-v7.3”(HDF5) .mat 文件似乎更快。怎么会?

    NOTE 本问题涉及 2011 年旧 MATLAB 版本 R2009a 中观察到的问题 根据 2016 年 7 月的以下更新 MATLAB 中的问题 错误似乎不再存在 使用 R2016a 进行测试 向下滚动到问题末尾以查看更新 我正在使用
  • 根据联系人电话号码获取联系人照片 Android - 工作示例 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 安卓2 3 3 我查看了有关如何获取 联系人照片 的各种示例 但他们都不适合我 令人惊讶的是 我在 StackOVerFlow 上偶然发现了一段代码 我使用了它并且可以获取 照片 并将
  • 如何通过 socket.io 将图像发送到服务器?

    我一直在为此绞尽脑汁 但找不到合适的解决方案 我希望能够通过 socket io emmit 将图像上传到服务器 并稍后将它们保存到 MongoDB 数据库 我该怎么做呢 我见过有人用 base64 编码来做这件事 但我不知道它到底是如何工
  • 使用类型变量进行强制转换

    下面的代码不起作用 我想知道如何动态地将实例转换为运行时确定的类型 Convert ChangeType 返回一个仍需要转换的对象 所有 Invoke GetConstructor 或 Activator CreateInstance 的尝
  • Pyramid 中可以有多个 ini 配置文件吗?

    我想要一个相当于姜戈一真道设置布局 一个共享基础文件 然后是生产文件和开发文件 每个文件都导入共享基础文件 Pyramid 的配置可以实现这一点吗 是的 这是可能的 在我的一个项目中 我有一个production base ini文件和所有
  • 使用 Xcode 在 MacOS X 上安装 GMP

    我正在尝试在我的 C 和 C 程序中使用 GMP 库 我使用 Xcode 编写代码 我按照说明在我的计算机上安装了 GMP 最终得到了一个文件夹 usr local gmp 5 0 5 其中包含 gmp h 文件 我怎样才能让我的程序看到这
  • ZXing Barcode Reader:如何在捕获屏幕周围制作自定义边框?

    我想在 zxing 捕获屏幕 相机屏幕 周围放置自定义边框 我需要为此进行什么修改 我需要更改哪些活动和布局才能达到此效果 您根本不需要编辑布局 In ViewfinderView find onDraw方法 它是绘制 扫描矩形 的核心 您
  • Forecast.io API 与 jQuery 的结合使用

    我在使用 API 特别是 Forecast io 天气 API 创建完整的应用程序时遇到一些问题 为简单起见 我将 JS 直接放在 HTML 页面中 对于这个基本版本 我很高兴能有这样的展示 假设我想要当前温度 当前 gt 温度 另外 我不
  • 在 Django 中引用来自 Javascript 的静态图像

    所以我正在开发一个 Django 项目 并试图找出如何让 Javascript 能够从我的静态目录渲染图像 我修改了 settings py 以从 myproject static 加载静态文件 图像 js 等 并从 myproject t
  • 绑定不匹配错误和java泛型方法

    我收到以下错误 Bound mismatch The generic method constructPage WebDriver int Class
  • RStudio 项目打开时自动运行 R 代码

    我编写了一个 R 函数来更新包的版本号另一个问题 我经常使用 GitHub 和 RStudio 如果每次我打开某个项目时都会自动运行此函数 或者更好的是进行 git commit push 但我认为这更难做到 但我不知道该怎么做或者这是否可
  • 401 未找到 JWT 令牌

    我提供了两个版本security yaml文件 第二个版本根据API平台文档 API平台发送到创建自定义用户提供者 对于第二个选项security yaml根据 API 平台文档推荐 我需要创建两个额外的文件 我没有将它们附加到主题中 但如
  • 如何在 Joomla 2.5 中获取用户组名称

    我正在编写一个 Joomla 2 5 组件 我一直在 Joomla 1 7 中开发该组件 我一直在使用这样的代码 user JFactory getUser groups user gt get groups groups 数组将包含一个以
  • $@ 和“$@”有什么区别吗? [复制]

    这个问题在这里已经有答案了 有什么区别吗 and 我知道非特殊字符可能存在差异 但是 用输入参数签名 Yes cat a sh echo echo 让我们运行一下 a sh 2 3 4 5 2 3 4 5 output for 2 3 4
  • 如何使用透明背景的画布获取 CSS 样式元素的 png 图像?

    我想使用 CSS 为网页上的元素设置样式 然后将该元素用作静态 png 是否可以在例如上绘制html节点 画布并将此类透明图像保存到文件中 我想找到一种方法 使用 CSS 获取现有的 HTML 并将其渲染为 PNG 文件并保持透明度 将 H