当drawImage()
用于在canvas元素上绘制内容时,画布可以被视为图像吗?
当我右键单击绘制的画布元素时,它会显示“将图像另存为”选项。
这是我看到的右键菜单:
如何使用“将图像另存为”选项?
答案 0 :(得分:6)
所以,这很大程度上取决于浏览器以及它是如何工作的,一般来说我不建议搞乱这个,但是如果你 让这个因为某个原因而工作那么一种方法:您可以在每次绘制后“简单地”将画布转换为<img>
元素,而是显示<img>
元素。
var canvas = document.getElementById('exampleCanvas'); //Hidden <canvas> element
var imageFoo = document.getElementById('exampleImg'); //Visible <img> element
然后在每次抽奖结束后:
imageFoo.src = canvas.toDataURL();
这里的缺点是你会失去很多速度,所以不要将它用于动画画布或类似的东西。
答案 1 :(得分:1)
为方便起见,“保存为图像...”是某些浏览器(包括Chrome和Firefox)在上下文菜单中包含的内容。但它不是任何标准。
你可以模仿右键单击并提供自定义上下文菜单,并选择另存为,但是,这里有一点需要注意:
为此,您需要同时支持A-tag中的download
属性。问题是,例如IE,它没有在菜单中提供“另存为图像..”选项,也不支持download
属性。
更好的选择可能是在完成时插入实际图像而不是或在画布顶部插入(取决于使用alpha通道的方式)。如果内容是动态的并且不断更新,这可能并不总是可行的,并且对于从外部源加载的图像也存在CORS限制。
总结:很少有人可以为此做出可靠的解决方法。它几乎是一个浏览器功能(并且选择支持哪个浏览器已经是功能本身的情况,所以这里没有增益......)。
答案 2 :(得分:0)
如果你想在画布上下载图片,你可以这样做:
<!doctype html>
<html lang="gb">
<head>
</head>
<body>
<canvas id="test"></canvas>
<script>
var canvas = document.getElementById('test');
var ctx = canvas.getContext("2d");
ctx.font = "30px Arial";
ctx.fillText("Noel Rocks",10, 50);
canvas.addEventListener("contextmenu", function(ev){
ev.preventDefault();
var image_png = canvas.toDataURL("image/png");
var download = document.createElement('a');
download.href = image_png;
download.download = "canvas.png";
var evObj = document.createEvent('MouseEvents');
evObj.initEvent( "click", true, false );
download.dispatchEvent(evObj)
}, false);
</script>
</body>
</html>
基本上它会覆盖上下文菜单,将画布的链接设置为png,然后将click事件发送到链接。我使用了Download属性,这在任何版本的IE或Safari中都不可用,因此可能不适合一般用途。