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

如何将图像从canvas标记保存到php服务器?

宰父正真
2023-03-14
问题内容

我有这样的JavaScript代码

var testCanvas = document.getElementById('canvas-1');
var canvasData = testCanvas.toDataURL("image/png");
var ajax = new XMLHttpRequest();
ajax.open("POST",'http://www.domain.com/imgsave.php',true);
ajax.setRequestHeader('Content-Type', 'canvas/upload');
ajax.send("canvasData"+canvasData );

我的PHP代码是这样的

if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
    // Get the data
    $imageData=$GLOBALS['HTTP_RAW_POST_DATA'];

    $filteredData=substr($imageData, strpos($imageData, ",")+1);

    $unencodedData=base64_decode($filteredData);
    $fp = fopen( 'test.png', 'wb' );
    fwrite( $fp, $unencodedData);
    fclose( $fp );
        echo "saved";
}
  else{

  echo "no raw data";
  }

执行此代码时,我得到了一个零尺寸的png文件图像?我的代码有什么问题?


问题答案:

我最近不得不自己做。

首先,我将canvasData放入一个隐藏字段中,并将其发布到我的PHP页面中。

它以以下格式返回: data:image/png;base64,iVBORw0......

您需要首先拆分数据,因为这data:image/png;base64,是标题信息。其余的是编码数据。

$rawData = $_POST['imageData'];
$filteredData = explode(',', $rawData);

$unencoded = base64_decode($filteredData[1]);

然后,在服务器上创建映像:

//Create the image 
$fp = fopen('sigs/test1.png', 'w');
fwrite($fp, $unencoded);
fclose($fp);

然后阅读以完成我想做的事情。

$file_name = 'test1.png';
$file_size = strlen($filteredData[1])/1024; //This may be wrong, doesn't seem to break for me though.


$fh = fopen('sigs/test1.png', 'r');
$content = fread($fh, $file_size);
$content = base64_encode($content);
fclose($fh);

我非常确定有解决此问题的更优雅的方法,但这一直对我有用!



 类似资料:
  • 我正在努力使用JavaScript和PHP将我的画布图像保存到服务器。我已经尝试了JS和PHP的多个例子,但总是失败。关于如何将图像数据发送到PHP脚本(bas64、blob、FormData),有相互矛盾的建议,我不确定如何最好地与JS通信。目前,零字节的PNG文件被保存到服务器,我不知道为什么。我想在服务器上将生成的画布保存为PNG,并在成功时在JS中执行命令。如何最好地处理它? JS: PH

  • 问题内容: 我需要将图像从PHP URL保存到PC。假设我有一个页面,其中仅包含一个“花”图像,仅此而已。如何使用新名称(使用PHP)从URL中保存该图像? 问题答案: 如果您设置为: 其他使用cURL:

  • 请原谅我的新问题,这个问题主要是因为我顽固地缺乏对拉雷维尔多对多关系的理解。 在我的网站上,用户可以上传图片 伴随着用户自己创建的标签。这些标记存储为一个数组,经过验证,然后检查标记是否存在。如果标签存在,我希望在“tagmap”上有一个条目,将新图像与该标签相关联。如果它不存在,我希望同样的事情发生,但也有一个新的标签被创建。 我有3个表,一个图像表、一个标签表和一个名为“tagmap”的透视表

  • 我正在进行一个生成艺术项目,我希望允许用户保存从一个算法得到的图像。大意是: 使用生成算法在HTML5画布上创建图像 完成映像后,允许用户将画布作为映像文件保存到服务器 允许用户下载图像或将其添加到使用该算法生成的图像库中。 然而,我却被卡在了第二步上。经过谷歌的一番帮助,我找到了这篇博文,似乎正是我想要的: 这导致了JavaScript代码: 和相应的PHP(testsave.PHP): 但这似

  • 我已经为KeystoneJS的AdminUI编写了一个自定义字段,它使用了TinyMCE的编辑器。 KeystoneJS在下面运行Apollo GraphQL服务器,并根据CMS模式自动生成变化和查询。TinyMCE具有输入自定义挂钩以上载图像的功能。 我希望能够连接这两个——使用GraphQL将图像从TinyMCE上传到KeystoneJS的服务器。 例如,在我的设置中,我在CMS中有一个字段。

  • 问题内容: 我要上传图像并将其保存在服务器中。我上传了图像并获得了预览,但是我被困在将图像发送到服务器上。我想使用角度服务将此图像发送到服务器。 这是HTML代码 这是指令 问题答案: 假设您在后端中期望Multipart,这是一段对我有用的代码。 这是一个jsfiddle。 请注意 以下部分: 是一些Angular魔术,为了使$ http解析FormData并找到正确的内容类型,等等。