我有这样的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,iVBORw0......
您需要首先拆分数据,因为这data:image/png;base64,是标题信息。其余的是编码数据。
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);
我非常确定有解决此问题的更优雅的方法,但这一直对我有用!