2017-02-18 63 views
0

我想從客戶端的畫布上獲取圖像數據,並將其保存爲我的服務器上的.png。php畫布到服務器上的圖像

這是從畫布獲取圖像數據並將其發送到saveImage.php我的客戶端代碼:

function render() 
    { 

     var imageData = ctx.canvas.toDataURL("image/png"); 
     var postData = "imageData="+imageData; 

     var ajax = new XMLHttpRequest(); 
     ajax.open("POST","saveImage.php",true); 
     ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
     ajax.onreadystatechange=function() 
     { 
      console.log(ajax.responseText); 
     } 

     ajax.send(postData); 
    } 

而這正是saveImage.php樣子:

<?php 
    if(isset($_POST["imageData"])) 
    { 
     $imageEncoded = $_POST["imageData"]; 

     $imageDataExploded = explode(',', $imageEncoded); 

     $imageDecoded = base64_decode($imageDataExploded[1]); 

     $filename = time()."image".mt_rand(); 

     $file = fopen("./".$filename.".png","wb"); 
     fwrite($file, $imageDecoded); 
     fclose($file); 
     echo $filename; 
     exit(); 
    } 
?> 

代碼實際上工作正常,我的問題只是在某些方面創建的圖像有問題。 當我嘗試打開它時,windows說它不能顯示圖像,因爲它不支持格式?即使它是一個.png?

我在做什麼錯在這裏?

+0

您是否使用文本編輯器或十六進制編輯器查看了文件上下文,並將其與原始文件進行了比較?你看到什麼差異? –

回答

0

你應該encodeURIComponent()包括它在POST數據之前編碼數據。

您還應該使用像jQuery這樣的框架來解決瀏覽器差異問題。我保證代碼在所有瀏覽器中都不會起作用。

在PHP上,請嘗試查看file_put_contents()以撰寫數據。打字速度更快!

0

您是否檢查過實際通過HTTP發送的內容? $ imageEncoded大概始於數據:圖像/ PNG; BASE64,爲XXXXX

地帶的一切行動,以逗號BASE64後:

https://stackoverflow.com/a/15153931/3766670

+0

我編輯腳本以刪除「data:image/png; base64」,但它仍然無效:( – stav

相關問題