1

キャンバスから画像を作成しようとしていますが、何度か試した後、バックエンドにアップロードされたPNGが機能していないようです。誰かがここで何が起こっているのか見ることができますか?

私のJavaScript:

    stage.toDataURL({
    callback: function(dataUrl) {
        var imgURL = dataUrl; // keep the entire url
        $.ajax({
            type: "POST",
            url: "http://www.xxxx.nl/pointer/upload.php", 
            data: ({imgData : imgURL}),
            cache: false,
            success: function(result){
                //window.open(dataUrl); // Show result stage in a new window
                alert(result); // show php error if exists
            }
        });
    }
});

そして今のところ私の本当に基本的な.php:

$im = imagecreatefrompng($_POST['imgData']);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);

私のエラーログ:

[Fri Mar 08 11:29:16 2013] [error] [client 24.132.214.139] mod_security: Access denied with code 500. Error reading request body, error code 70007: The timeout specified has expired [hostname "www.ccc.nl"] [uri "/pointer/upload.php"] 
4

1 に答える 1

1

これを行う場合:

var canvasData = myCanvas.toDataURL("image/png");

次のように、.png を表す base64 でエンコードされた文字列を取得します。

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAGB………

この文字列には、data:image/png;base64 というヘッダーがプレフィックスとして付けられていることに注意してください。このヘッダーは、.png ファイルによって不要/認識されず、imagecreatefrompng() を汚します。したがって、この文字列を保存して .png を作成するときは、ヘッダーを取り除く必要があります。PHP 側では、次のように実行できます (ただし、クライアント側で削除することもできます)。

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

そして、通常どおり続行します…</p>

于 2013-03-09T19:45:00.750 に答える