Pour le dire simplement, vous ne pouvez pas. Lorsque vous appelez la méthode toDataURL sur HTMLCanvasElement, elle génère une représentation sous forme de chaîne de l'image en tant qu'URL de données. Ainsi, si vous tentez de sauvegarder l'image, le navigateur lui donne un nom de fichier par défaut (par exemple, Opera l'enregistre comme default.png si l'URL de données est un fichier png).
De nombreuses solutions de contournement existent. La plus simple est de faire un appel AJAX à un serveur, enregistrer l'image sur le côté serveur et renvoyer l'URL de l'image enregistrée qui peut alors être accessible et enregistré sur le côté client:
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());
}
Pour enregistrer l'image sur le côté serveur, utilisez le script PHP suivant:
$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";
Peut-être lié: http://stackoverflow.com/questions/6723931/javascript-aperçus-avec-nouveau-filereader-api-et-dataurls-semblent-inefficace/6723973 # 6723973. – pimvdb
réponse courte est "son impossible" dans les navigateurs actuels. long est "télécharger cette image sur un serveur, la stocker là-bas, et lui donner l'url" – c69