首页 > 后端开发 > php教程 > 为什么我的 HTML5 Canvas 图像保存到服务器时会损坏?

为什么我的 HTML5 Canvas 图像保存到服务器时会损坏?

Mary-Kate Olsen
发布: 2024-12-27 09:48:10
原创
831 人浏览过

Why Are My HTML5 Canvas Images Corrupted When Saving to the Server?

在服务器上将 HTML5 Canvas 保存为图像的疑难解答

问题

遵循在线教程后,尝试将 HTML5 Canvas 保存为图像在服务器上导致文件损坏或空。原因尚不清楚。

解决方案

1.正确配置 XMLHttpRequest:

  • 将自定义 XMLHttpRequest 创建替换为以下内容以支持旧版和现代浏览器:
var xmlHttpReq = false;
if (window.XMLHttpRequest) {
  ajax = new XMLHttpRequest();
} else if (window.ActiveXObject) {
  ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
登录后复制
  • 设置内容类型为application/x-www-form-urlencoded:
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
登录后复制

2.修改 PHP 脚本:

  • 将 substr($imageData, strpos($imageData, ",")) 更改为 substr($imageData, strpos($imageData, ",")) 1 .
  • 通过检查文件句柄之前是否有效来处理潜在的错误写作:
if ($fp) {
  fwrite($fp, $unencodedData);
  fclose($fp);
}
登录后复制

修订的 JavaScript 和 PHP 代码:

JavaScript

function saveImage() {
  var canvasData = canvas.toDataURL("image/png");
  var xmlHttpReq = false;

  if (window.XMLHttpRequest) {
    ajax = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    ajax = new ActiveXObject("Microsoft.XMLHTTP");
  }

  ajax.open("POST", "testSave.php", false);
  ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  ajax.onreadystatechange = function() {
    console.log(ajax.responseText);
  }
  ajax.send("imgData=" + canvasData);
}
登录后复制

PHP

<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {
  $imageData = $GLOBALS['HTTP_RAW_POST_DATA'];
  $filteredData = substr($imageData, strpos($imageData, ",")+1);
  $unencodedData = base64_decode($filteredData);

  if ($fp = fopen('/path/to/file.png', 'wb')) {
    fwrite($fp, $unencodedData);
    fclose($fp);
  }
}
?>
登录后复制

以上是为什么我的 HTML5 Canvas 图像保存到服务器时会损坏?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板