【问题标题】:How to convert a block of rendered HTML code or a div into a PNG?如何将渲染的 HTML 代码块或 div 转换为 PNG?
【发布时间】:2013-11-20 13:33:34
【问题描述】:

一些注意事项:
a) 不是整个页面,
b)不是来自服务器端。
c) 渲染或“处理”的 HTML,例如
<table> <tr><td width="5%"> <td>fact 1 </td> fact 2 </td> </tr> </table>

期望的结果(对于 PNG):

事实 1 事实 2 事实 3 事实 4 ...

不是 事实 1 事实 2 事实 3 事实 4 ...

“标志”nbsp; 可用于创建空白区域,但需要再次渲染。

可能是一些 javascript 首先充当 ua(浏览器)以首先获取呈现的数据,然后 然后将其转换为PNG支持的bmp格式...如何?代码示例将不胜感激。

非常感谢。

【问题讨论】:

  • 请问您为什么要这样做?您说您主要需要 Firefox 支持,所以我只是想了解其目的,因为它可能是一个很好的替代方案/解决方法——PNG 的用途是什么?

标签: html canvas


【解决方案1】:

在服务器端生成它有什么问题?

编辑: 只使用 html+css 有什么问题?对于用户来说,它看起来相同,打印相同,并且更快、可搜索和可访问,并且您可以使用 Javascript 轻松操作它。我不明白你为什么要首先拥有这些图像。

此问题的简短回答与other post 中的相同:不,您不能。 您必须克服许多问题,包括但不限于:

  • 您需要将 HTML 正确地呈现为位图。这比看起来要困难得多。

  • 使用 PNG 压缩图像并非易事,虽然使用 JS 在技术上可以做到这一点,但这绝对是一个非常糟糕的主意。

即使你设法解决了这些问题,你最终也会得到几乎没有机会跨浏览器工作的 hacky 和极其脆弱的代码。

这样做就像需要一些 混凝土和开发月球火箭 收获月球尘埃来制造它 而不是在家得宝买一些。

- ceejayoz,similar 主题上

不过,您可能想看看 alternatives(SVG、Canvas、服务器端生成……)。


编辑 2: Here's an example 直接从 HTML 文件加载的图像

我使用 PHP 对这些图像进行 base64_encode。这是来源:

<script type="text/javascript">
var i = 0;
var imgs = [];
<?php

$imgArray = array('angry.gif', 'pray.gif', 'think.gif');
$imgs = array_map(function ($d) {return base64_encode(file_get_contents($d));}, $imgArray);
$i=0;

foreach ($imgs as $img) {
    echo 'imgs[' . $i++ . '] = "' . $img . "\";\n";
}
?>

function changeImg() {
    i = (i+1) % imgs.length;
    var img = document.getElementById('theImage');
    img.src = 'data:image/gif;base64,' + imgs[i];
}
</script>
<body onload="changeImg()">
<input type="button" onclick="changeImg();" value="Change Image" /><br /><br />
<img src="" id="theImage" alt="" />

【讨论】:

  • 好吧,目前,服务器端:我正在使用Railo,有点相当于Adobe的ColdFusion,目前,它无法做到。所以,看起来我被困住了。
  • Aircule,这张 PNG 图像可以作为基础...啊哈,只要知道你为 google 工作...而且这张照片很有趣,有趣和聪明的家伙 :)
  • " 这样做就像需要一些混凝土并开发月球火箭来收集月球尘埃来制造它,而不是在 Home Depot 购买一些。- ceejayoz,"这对我的情况来说绝对不正确。
  • @Aircule,我尝试了“创建图像并将其 src 设置为数据:资源”的 #7,但在 Firefox 中失败并且(该应用程序不是公共/托管服务,所以我们对浏览器有一定程度的“控制”/推荐。此外,尝试将 SVG 加载到画布中也失败了。非常令人沮丧。
  • @Don Don 如果您执行 #7,您需要以可以与 HTML 文件一起使用的方式对二进制数据进行编码(即:base64)。看到这个example here
猜你喜欢
  • 2016-04-19
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 2010-09-26
  • 2015-03-15
  • 2014-07-30
  • 2016-12-16
  • 2022-01-15
相关资源
最近更新 更多