减慢domtoimage js的时间

时间:2018-04-09 13:17:20

标签: javascript html

我正在使用domtoimage库将html(包含大量CSS)转换为图像。

实际上我需要高清晰度图像用于打印目的(600 DPI)。所以为此,我将html缩放(缩放)到6.25(600/96)次,然后我使用domtoimage捕获它。按照我的计划,我很成功。我的图像分辨率高,打印清晰度也令人满意。

但问题在于优化。 domtomimage需要很长时间。我知道这个问题是因为html缩放,但我需要高分辨率图像。

任何想要快速捕获的想法?我主要关注的是减少图书馆捕获和创建图像所需的时间。

注意:

  1. 我也尝试使用幻像JS,但不支持某些css属性。
  2. 我也尝试了html2canvas,它也有一些CSS属性的限制
  3. 仅供参考我已添加scale属性以绘制函数

    function draw(domNode, options) {
            return toSvg(domNode, options)
                .then(util.makeImage)
                .then(util.delay(100))
                .then(function (image) {
                    var canvas = newCanvas(domNode);
                   // canvas.getContext('2d').drawImage(image, 0, 0);
                    var ctx = canvas.getContext('2d');
                    if(options.scale){
                        ctx.scale(6.25,6.25);
                    }
                    ctx.drawImage(image, 0, 0);
                    return canvas;
                });
    
            function newCanvas(domNode) {
                var canvas = document.createElement('canvas');
                 if(options.scale){
                     canvas.width = options.width || 6.25 * util.width(domNode); 
                     canvas.height = options.height || 6.25 * util.height(domNode); 
                 }
                 else{
                    canvas.width = options.width || util.width(domNode);
                    canvas.height = options.height || util.height(domNode);     
                 }
    
                if (options.bgcolor) {
                    var ctx = canvas.getContext('2d');
                    ctx.fillStyle = options.bgcolor;
                    ctx.fillRect(0, 0, canvas.width, canvas.height);
                }
    
                return canvas;
            }
        }
    

1 个答案:

答案 0 :(得分:1)

通过跳过字体重新渲染过程,我可以将图像生成过程加快数倍。我不确定您要捕获的内容是什么,但是如果不是特定于字体的,我会根据其他用户的建议对库进行分叉和编辑,它对我有用。它还帮助我摆脱了由于CORS导致的许多失败的XHR请求,并且目前可以在所有浏览器上使用。

签出https://github.com/venkat4541/dom-to-image

根据您的字体使用情况,这可能对您不起作用。希望对您有所帮助。