domToImage 中文文档

前言

最新做一个JS截图的功能,了解到 domToImage 这个插件,还算轻巧好用。看了下只有英文文档,尝试翻译一下。四级的英语水平也不知道翻译得到不到位,欢迎指正昂~
(另外还有个比较多见的JS截图插件 html2canvas,后面有空再出一篇html2canvas和domToImage对比的 。)

翻译自:https://github.com/tsayen/dom-to-image

DOM to Image

是什么

dom-to-image 是一个JS类库,它可以将任意DOM节点转换成 SVG/PNG/JPEG 格式的图像。它基于 domvas by Paul Bakaus 进行重写,修复了一些一至错误,并添加了部分功能(如web字体和图像支持)。

安装

NPM

npm install dom-to-image

引入

/* ES 6 引入 */
import domtoimage from 'dom-to-image';
/* ES 5 引入*/
var domtoimage = require('dom-to-image');

Bower

bower install dom-to-image

在页面中引入 src/dom-to-image.jsdist/dom-to-image.min.js,将注入一个全局变量 domtoimage ,你可以在全局范围内使用它。

<script src="path/to/dom-to-image.min.js" />
<script>
  domtoimage.toPng(node)
  //...
</script>

使用

所有的顶层函数都可以接收一个 DOM 节点和渲染参数,并返回一个带有 dataUrls 的 promise。

生成一个 base64编码格式的 PNG 图片,并在页面展示出来:

var node = document.getElementById('my-node');

domtoimage.toPng(node)
    .then(function (dataUrl) {
    
    
        var img = new Image();
        img.src = dataUrl;
        document.body.appendChild(img);
    })
    .catch(function (error) {
    
    
        console.error('oops, something went wrong!', error);
    });

生成一个 Blob 格式的 PNG 图片,并下载它(此处的下载使用 FileSaver):

domtoimage.toBlob(document.getElementById('my-node'))
    .then(function (blob) {
    
    
        window.saveAs(blob, 'my-node.png');
    });

生成并下载一个被压缩的 JPEG 图片:

domtoimage.toJpeg(document.getElementById('my-node'), {
    
     quality: 0.95 })
    .then(function (dataUrl) {
    
    
        var link = document.createElement('a');
        link.download = 'my-image-name.jpeg';
        link.href = dataUrl;
        link.click();
    });

生成一个 base64编码格式的 SVG ,并过滤掉其中的 元素:

function filter (node) {
    
    
    return (node.tagName !== 'i');
}

domtoimage.toSvg(document.getElementById('my-node'), {
    
    filter: filter})
    .then(function (dataUrl) {
    
    
        /* do something */
    });

以Uint8Array的形式获取原始像素数据,每4个数组元素代表一个像素的RGBA数据:

var node = document.getElementById('my-node');

domtoimage.toPixelData(node)
    .then(function (pixels) {
    
    
        for (var y = 0; y < node.scrollHeight; ++y) {
    
    
          for (var x = 0; x < node.scrollWidth; ++x) {
    
    
            pixelAtXYOffset = (4 * y * node.scrollHeight) + (4 * x);
            /* pixelAtXY is a Uint8Array[4] containing RGBA values of the pixel at (x, y) in the range 0..255 */
            pixelAtXY = pixels.slice(pixelAtXYOffset, pixelAtXYOffset + 4);
          }
        }
    });

渲染参数

filter

接收一个过滤函数。

bgcolor

指定背景颜色。接收任意有效的CSS色值字符串。

height,width

渲染前要应用于节点的高度和宽度(以像素为单位)。

style

接收一个指定节点样式的对象。

quality

接收0到1之间的数字(例如0.92 => 92%),用于指定JPEG图像的图像质量。默认为1.0(100%)

cacheBust

设置为true时,会将当前时间作为请求参数附加到URL请求,以启用缓存清除。 默认为false。

imagePlaceholder

接收一个占位图的 dataUrl,在图片转换失败时使用。默认为 undefined,图片转换失败时抛出错误。

浏览器支持

已在最新版的Chrome(49) 和 Firefox(45) 浏览器中进行测试。对于节点数量较大的DOM树,Chrome 的性能明显比 Firefox 要好,可能是因为它对 SVG 的渲染性能更高,而且它支持CSSStyleDeclaration.cssText 属性。

不支持 IE。因为IE浏览器不支持 SVG 的 <foreignObject> 标签。

不支持 Safari。因为它对<foreignObject> 标签使用了更严格的安全模型。 建议使用 toSvg 在服务器上进行渲染。

猜你喜欢

转载自blog.csdn.net/lychee_xiahua/article/details/112967240
今日推荐