将图像从浏览器发送到服务器 - 可能吗?

时间:2012-08-25 15:09:30

标签: php javascript html image canvas

有一个图片库网站,用户可以通过javascript和HTML5画布操作图像。是否可以将操纵的图像发送回服务器以便与PHP一起存储?

2 个答案:

答案 0 :(得分:4)

HERE你可以找到关于这个主题的完整文章。但这是简短的版本和源代码:

首先,您需要将画布二进制数据转换为基本64位编码字符串,以将其发送到服务器:

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

使用ajax调用发送此信息:

var ajax = new XMLHttpRequest();
ajax.open("POST",'save.php', false);
ajax.setRequestHeader('Content-Type', 'application/upload');
ajax.send(image);

最后,PHP脚本save.php如下所示:

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

    // Remove the headers (data:,) part. 
    // A real application should use them according to needs such as to check image type
    $filteredData=substr($imageData, strpos($imageData, ",")+1);

    // Need to decode before saving since the data we received is already base64 encoded
    $unencodedData=base64_decode($filteredData);

    //echo "unencodedData".$unencodedData;

    // Save file.  This example uses a hard coded filename for testing,
    // but a real application can specify filename in POST variable
    $fp = fopen( 'test.png', 'wb' );
    fwrite( $fp, $unencodedData);
    fclose( $fp );
}
?>

PHP脚本解析原始发布数据,从base 64转换为binary,并保存到文件中。有关Base 64的更多信息,请查看THIS Wikipedia文章。

答案 1 :(得分:0)

是的,canvas支持将图像数据作为Base64编码数据url或Blob返回。见http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-canvas-todataurl。然后,您可以获取数据URL并使用AJAX将其发布到您的服务器,并在那里进行Base64解码。