当前位置: 首页 > 面试题库 >

html2canvas保存图像不起作用

庾波光
2023-03-14
问题内容

我正在使用html2canvas 0.4.0渲染屏幕截图,并希望将其另存为Web服务器上的图像。

为此,我编写了以下函数

JavaScript

function screenShot(id) {

    html2canvas(id, {
        proxy: "https://html2canvas.appspot.com/query",
        onrendered: function(canvas) {

            $('body').append(canvas); // This works perfect...

            var img = canvas.toDataURL("image/png");
            var output = img.replace(/^data:image\/(png|jpg);base64,/, "");

            var Parameters = "image=" + output + "&filedir=" + cur_path;
            $.ajax({
                type: "POST",
                url: "inc/saveJPG.php",
                data: Parameters,
                success : function(data)
                {
                    console.log(data);
                }
            }).done(function() {
            });

        }
    });
}

saveJPG.php

<?php
    $image = $_POST['image'];
    $filedir = $_POST['filedir'];
    $name = time();

    $decoded = base64_decode($image);

    file_put_contents($filedir . "/" . $name . ".png", $decoded, LOCK_EX);


    echo $name;
?>

渲染完画布后,我可以将其完美地附加到HTML主体中,但是将其保存在服务器上会导致文件损坏(?)。

我可以在IrvanView中读取尺寸,但是图像是透明的/空的?该文件约为2.076 KB。所以它不是真的是空的。

我也尝试过使用JPEG,这会导致文件损坏,IrfanView会说类似“伪造的标记长度”。

屏幕截图的尺寸为650x9633。POST方法是否要处理大量数据?


问题答案:

如果有人偶然发现了相同的问题,这就是我的解决方法:

问题取决于以下事实:大多数服务器将+URL中的URL解释为编码空间(例如%20)。因此,我需要先对数据进行编码,然后将其发送POST到我指定的PHP函数。

这是我的代码:

JavaScript

function screenShot(id) {

    html2canvas(id, {
        proxy: "https://html2canvas.appspot.com/query",
        onrendered: function(canvas) {

            var img = canvas.toDataURL("image/png");
            var output = encodeURIComponent(img);

            var Parameters = "image=" + output + "&filedir=" + cur_path;
            $.ajax({
                type: "POST",
                url: "inc/savePNG.php",
                data: Parameters,
                success : function(data)
                {
                    console.log("screenshot done");
                }
            }).done(function() {
                //$('body').html(data);
            });

        }
    });
}

savePNG.php

<?php
    $image = $_POST['image'];
    $filedir = $_POST['filedir'];
    $name = time();



    $image = str_replace('data:image/png;base64,', '', $image);
    $decoded = base64_decode($image);

    file_put_contents($filedir . "/" . $name . ".png", $decoded, LOCK_EX);


   echo $image;
?>


 类似资料:
  • 我有下面的代码 但是奇怪的是,当我在浏览器上打开控制台,然后尝试它完美地生成图像,然后我甚至关闭了控制台,图像正在正确地生成

  • 我的PDFBox有问题。我有一个PDF格式的空白页,我想在其中插入图像。因为我也使用签名PDF,所以所有更改都必须保存为“saveIncremental”。 当我只插入一个图像时,一切都很好(图像已被插入)。当我试图在这个PDF中插入另一个图像时,它没有被插入,当在Adobe Acrobat Reader中打开时,它说“此页面存在错误。Adobe可能无法正确显示页面...”。 奇怪的事情-当PDF

  • 保存图像 能将图像保存至Memory Stick™或主机内存。 1. 让指针对准想要保存的图像,从选单列中选择[档案] > [保存图像]。 2. 选择[保存]。 提示 若想变更文件名或保存位置,请选择各项输入栏,并执行决定。

  • 本文向大家介绍TensorFlow保存TensorBoard图像操作,包括了TensorFlow保存TensorBoard图像操作的使用技巧和注意事项,需要的朋友参考一下 简单的代码: ipython中使用!+命令可以直接运行terminal命令。 terminal输入: tensorboard --logdir graph/ 跳出:Starting TensorBoard 54 at http:

  • 我正在尝试使用html2canvas将div捕获到图像中。我有一个带滚动条的div。我想把这个div元素转换成image。当运行html2canvas时,它只捕获屏幕的可见部分,截断从滚动中隐藏的所有内容。设置“高度、宽度”属性没有影响。我使用的是html2canvas版本0.4。1. 感谢帮助。

  • 更新: 我得到以下错误: ...newimg1.save(“img1.png”)文件“C:\python27\lib\site-packages\pil\image.py”,第1439行,在save save_handler(self,fp,filename)文件“C:\python27\lib\site-packages\pil\pngimageplugin.py”中,第572行,在_save