簡単に言えば、できません。HTMLCanvasElementでtoDataURLメソッドを呼び出すと、画像の文字列表現がデータURLとして生成されます。したがって、画像を保存しようとすると、ブラウザはデフォルトのファイル名を与えます(たとえば、データURLがpngファイルの場合、Operaは画像をdefault.pngとして保存します)。
多くの回避策が存在します。最も簡単な方法は、サーバーにAJAX呼び出しを行い、サーバー側で画像を保存し、保存された画像のURLを返すことです。これにより、クライアント側でアクセスして保存できます。
function saveDataURL(canvas) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState === 4 && request.status === 200) {
window.location.href = request.responseText;
}
};
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.open("POST", "saveDataURL.php", true);
request.send("dataURL=" + canvas.toDataURL());
}
サーバー側で画像を保存するには、次のPHPスクリプトを使用します。
$dataURL = $_POST["dataURL"];
$encodedData = explode(',', $dataURL)[1];
$decodedData = base64_decode($encodedData);
file_put_contents("images/faizan.png", $decodedData);
echo "http://example.com/images/faizan.png";