php html2canvas保存图像不起作用

f5emj3cl  于 2024-01-05  发布在  PHP
关注(0)|答案(1)|浏览(168)

我渲染与html 2canvas 0.4.0截图,并希望保存为我的网络服务器上的图像。
为此,我编写了以下函数:

JavaScript

  1. function screenShot(id) {
  2. html2canvas(id, {
  3. proxy: "https://html2canvas.appspot.com/query",
  4. onrendered: function(canvas) {
  5. $('body').append(canvas); // This works perfect...
  6. var img = canvas.toDataURL("image/png");
  7. var output = img.replace(/^data:image\/(png|jpg);base64,/, "");
  8. var Parameters = "image=" + output + "&filedir=" + cur_path;
  9. $.ajax({
  10. type: "POST",
  11. url: "inc/saveJPG.php",
  12. data: Parameters,
  13. success : function(data)
  14. {
  15. console.log(data);
  16. }
  17. }).done(function() {
  18. });
  19. }
  20. });
  21. }

字符串

saveJPG.php

  1. <?php
  2. $image = $_POST['image'];
  3. $filedir = $_POST['filedir'];
  4. $name = time();
  5. $decoded = base64_decode($image);
  6. file_put_contents($filedir . "/" . $name . ".png", $decoded, LOCK_EX);
  7. echo $name;
  8. ?>


在画布被渲染后,我可以完美地将其附加到HTML主体,但将其保存在服务器上会导致损坏的(?)文件。
我可以在IrvanView中读取尺寸,但图像是透明/空的?文件大约2.076 KB大。所以它不是真的空的。
我也用JPEG试过这个,结果是一个损坏的文件,IrfanView说类似于“伪造的标记长度”。
屏幕截图的尺寸为650 x9633。对于POST方法来说,这是很多数据吗?

blmhpbnm

blmhpbnm1#

如果有人遇到同样的问题,我是这样解决的:
这个问题取决于这样一个事实,即大多数服务器将URL中的+解释为编码空间(如%20)。因此,我需要先对数据进行编码,然后通过POST将其发送到指定的PHP函数。
下面是我的代码:

JavaScript

  1. function screenShot(id) {
  2. html2canvas(id, {
  3. proxy: "https://html2canvas.appspot.com/query",
  4. onrendered: function(canvas) {
  5. var img = canvas.toDataURL("image/png");
  6. var output = encodeURIComponent(img);
  7. var Parameters = "image=" + output + "&filedir=" + cur_path;
  8. $.ajax({
  9. type: "POST",
  10. url: "inc/savePNG.php",
  11. data: Parameters,
  12. success : function(data)
  13. {
  14. console.log("screenshot done");
  15. }
  16. }).done(function() {
  17. //$('body').html(data);
  18. });
  19. }
  20. });
  21. }

字符串

savePNG.php

  1. <?php
  2. $image = $_POST['image'];
  3. $filedir = $_POST['filedir'];
  4. $name = time();
  5. $image = str_replace('data:image/png;base64,', '', $image);
  6. $decoded = base64_decode($image);
  7. file_put_contents($filedir . "/" . $name . ".png", $decoded, LOCK_EX);
  8. echo $image;
  9. ?>


干杯!干杯!

展开查看全部

相关问题