生成 div 的图像并另存为

Posted

技术标签:

【中文标题】生成 div 的图像并另存为【英文标题】:Generate an image of a div and Save as 【发布时间】:2016-02-13 14:38:29 【问题描述】:

我想创建一个输入按钮“保存图像”:

    截取 div 的屏幕截图 要求在用户计算机上“另存为”

我找到了如何使用 html2canvas 创建潜水屏幕并在新标签中打开它,它可以完美运行:

function printDiv2(div)

    html2canvas((div), 
        onrendered: function(canvas) 
            var img = canvas.toDataURL();
            window.open(img);
      
    );

但对你来说,另存为一部分,是一个艰难的部分......我发现了一些有趣的话题,因为我是 JS(和对象)编码的新手,我有点困惑......我想我必须使用 FileSaver.js 并创建一个新的 blob http://eligrey.com/blog/post/saving-generated-files-on-the-client-side/

但我不知道如何在我的 html2canvas 中实现 saveAs,如何正确转换新的 blob...

function printDiv2(div)

    html2canvas((div), 
        onrendered: function(canvas) 
            var img = canvas.toDataURL();
            window.open(img);

            var blob = new Blob(img, type: "image/jpeg");
            var filesaver = saveAs(blob, "my image.png");
      
    );

我还尝试通过提取 base64 生成的 URL 来解决这个问题,但它对我来说太复杂了,无法理解everyting: http://bl.ocks.org/nolanlawson/0eac306e4dac2114c752

但是有人给我一些提示并帮助我吗?

【问题讨论】:

你是怎么截屏的?如果您有代码,请提供代码 答案如下:-) ***.com/questions/45035486/… 如果您使用的是最新版本的库,则语法已更改。 【参考方案1】:

你看过了吗

http://eligrey.com/demos/FileSaver.js/

看起来它可以满足您的需求

【讨论】:

谢谢,但我已经继续了,这就是为什么我知道我必须使用 Filesaver.js,在这个页面上,他们使用的是画布,但我不能将我的 div 放入 标签【参考方案2】:

你可以这样做:

//Creating dynamic link that automatically click
function downloadURI(uri, name) 
    var link = document.createElement("a");
    link.download = name;
    link.href = uri;
    link.click();
    //after creating link you should delete dynamic link
    //clearDynamicLink(link); 


//Your modified code.
function printToFile(div) 
    html2canvas(div, 
        onrendered: function (canvas) 
            var myImage = canvas.toDataURL("image/png");
            //create your own dialog with warning before saving file
            //beforeDownloadReadMessage();
            //Then download file
            downloadURI("data:" + myImage, "yourImage.png");
        
    );

【讨论】:

是的!只需在link.href = uri; 之后添加document.body.appendChild(link); 即可!非常简单,谢谢。 谢谢!似乎从 17 年 5 月开始,渲染后的语法已经发生了变化。现在是 html2canvas(div).then(function(canvas) ...); ref: html2canvas.hertzen.com/getting-started【参考方案3】:

这是最终代码,如果它可以帮助你:

function PrintDiv(div)

    html2canvas((div), 
        onrendered: function(canvas) 
            var myImage = canvas.toDataURL();
            downloadURI(myImage, "MaSimulation.png");
      
    );


function downloadURI(uri, name) 
    var link = document.createElement("a");

    link.download = name;
    link.href = uri;
    document.body.appendChild(link);
    link.click();   
    //after creating link you should delete dynamic link
    //clearDynamicLink(link); 

【讨论】:

在 chrome 中工作但不在 IE 11 中 您能否分享完整的代码或多解释一下我不完全理解它是如何工作的,我正在努力实现同样的目标【参考方案4】:

这对我来说很好。

function downloadURI(uri, name) 
    var link = document.createElement("a");

    link.download = name;
    link.href = uri;
    document.body.appendChild(link);
    link.click();
    clearDynamicLink(link); 


function DownloadAsImage() 
    var element = $("#table-card")[0];
    html2canvas(element).then(function (canvas) 
        var myImage = canvas.toDataURL();
        downloadURI(myImage, "cartao-virtual.png");
    );

【讨论】:

以上是关于生成 div 的图像并另存为的主要内容,如果未能解决你的问题,请参考以下文章

VBA:将excel区域导出为图像并另存为文件。

如何在 BufferedImage 中使颜色透明并另存为 PNG

Photoshop - 增加文本中的数字并另存为该文本

“文件->另存为”和“另存为”之间的照明差异

如何为 PHP 生成的图像设置默认的“图像另存为”名称?

Python打开网页并另存为静态html怎么实现