0

画像をローカル ファイルに保存する際に問題が発生しています。他のすべてのものは問題ないように見えますが、画像は保存されません。これが私のコードのスニペットです。

    function saveImage(){
    var xmlhttp;
    xmlhttp=((window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP"));
    xmlhttp.onreadystatechange=function()
    {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            //do something with the response
        }
    }
    xmlhttp.open("POST","ajxstuff.php",true);
    var oldCanvas = document.getElementById('cvs').toDataURL("image/png");
    var img = new Image();
    img.src = oldCanvas;
    xmlhttp.setRequestHeader("Content-type", "application/upload")
    xmlhttp.send(oldCanvas);
}

ここに ajxstuff.php があります

<?php

if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
    // Get the data like you would with traditional post
    $rawImage=$GLOBALS['HTTP_RAW_POST_DATA'];

    // Remove the headers  
    $removeHeaders=substr($rawImage, strpos($rawImage, ",")+1);

    // decode it from base 64 and into image data only
    $decode=base64_decode($removeHeaders);

    // save to your server
    $saveName = 'C:\Users\Administrator\Downloads\image009.png';
    $fopen = fopen($saveName, 'wb' );
    fwrite( $fopen, $decode);
    fclose( $fopen );
}

?>
4

1 に答える 1

0

OK、これが私の修正された答えです:画像をファイル(のように見える)として送信する代わりに、テキストとして送信できます-それは toDataUrl() (画像のbase64エンコード表現)から得られるものだからです。

$.post('ajxstuff.php',{
    myChart: document.getElementById('cvs').toDataURL()
}, function ()
{
    /* callback */
})

PHP スクリプトでは、データは $_POST['myChart'] に表示され、次のようにファイルに書き込むことができます。

<?php
    $data = base64_decode($_POST['myChart']);
    file_put_contents('C:\Users\Administrator\Downloads\image009.png', $data);
?>
于 2015-07-11T09:23:47.850 に答える