【问题标题】:slow down time take by domtoimage jsdomtoimage js 减慢时间
【发布时间】:2018-08-29 06:01:34
【问题描述】:

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

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

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

有什么想法可以快速捕获吗?我的主要重点是减少图书馆捕获和创建图像所花费的时间。

注意:

  1. 我也尝试过使用 phantom JS,但它不支持某些 css 属性。
  2. 我也试过 html2canvas,它也有一些 CSS 属性的限制

仅供参考,我已将 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;
        }
    }

【问题讨论】:

    标签: javascript html


    【解决方案1】:

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

    查看https://github.com/venkat4541/dom-to-image

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

    【讨论】:

    • 感谢您的回复。我一定会调查并告诉你
    • 我需要用 6.25 的缩放系数来捕捉它。我的目的是将此图像打印为 600 DPI。所以我需要放大 6.25 倍。而dom-to-image.js 没有drawnewCanvas 方法。
    • 这个叉子太棒​​了!我把时间从 1 分 40 秒缩短到 14 秒 :)
    • 谢谢@henokg。很高兴听到它对您有所帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多