我目前正在构建一个HTML5网络应用程序/ Phonegap本机应用程序,我似乎无法弄清楚如何将我的画布保存为图像canvas.toDataURL().有人可以帮帮我吗?
这是代码,它有什么问题?
//我的画布名为"canvasSignature"
JavaScript的:
function putImage()
{
var canvas1 = document.getElementById("canvasSignature");
if (canvas1.getContext) {
var ctx = canvas1.getContext("2d");
var myImage = canvas1.toDataURL("image/png");
}
var imageElement = document.getElementById("MyPix");
imageElement.src = myImage;
}
Run Code Online (Sandbox Code Playgroud)
HTML5:
<div id="createPNGButton">
<button onclick="putImage()">Save as Image</button>
</div>
Run Code Online (Sandbox Code Playgroud) 所以我使用谷歌地图,我得到的图片,所以它看起来像这样
<img id="staticMap"
src="http://maps.googleapis.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=13&size=600x300&maptype=roadmap
&markers=color:blue%7Clabel:S%7C40.702147,-74.015794&markers=color:green%7Clabel:G%7C40.711614,-74.012318
&markers=color:red%7Ccolor:red%7Clabel:C%7C40.718217,-73.998284&sensor=false">
Run Code Online (Sandbox Code Playgroud)
我需要保存它.我发现了这个:
function getBase64FromImageUrl(URL) {
var img = new Image();
img.src = URL;
img.onload = function() {
var canvas = document.createElement("canvas");
canvas.width = this.width;
canvas.height = this.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(this, 0, 0);
var dataURL = canvas.toDataURL("image/png");
alert(dataURL.replace(/^data:image\/(png|jpg);base64,/, ""));
};
}
Run Code Online (Sandbox Code Playgroud)
但是我遇到了这个问题:
Uncaught SecurityError:无法在'HTMLCanvasElement'上执行'toDataURL':可能无法导出受污染的画布.
我搜索了修复程序.我在这里找到了一个示例如何使用CORS,但我仍然无法将这两个代码绑在一起以使其工作.也许我这样做的方式不对,有一种更简单的方法吗?我正在尝试保存此图片,以便我可以将数据传输到我的服务器.所以也许有人做了这样的事情并知道如何按需要做.toDataURL()工作?
有没有办法让图像一旦点击就下载(没有右键单击保存图像)?
我正在使用一个小的Javascript函数来调用下载页面:
<a href="#"
onclick="window.open('download.php?file=test.jpg', 'download', 'status=0');"
>Click to download</a>
Run Code Online (Sandbox Code Playgroud)
在download.php页面中我有类似的东西:
$file = $_GET['file'];
header('Content-Description: File Transfer');
header("Content-type: image/jpg");
header("Content-disposition: attachment; filename= ".$file."");
readfile($file);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我究竟做错了什么?
提前致谢!
我想使用fabric.js将Canvas下载为PNG.在下载时我想缩放图像.所以我使用multiplier了toDataURL()函数的属性.但我得到了失败 - 网络错误
PS:如果我不给multiplier属性,它正在下载,但我确实想要使用multiplier属性,因为我必须缩放图像
这就是我在做的事情:
HTML代码:
<canvas width="400" height="500" id="canvas" ></canvas>
<a id='downloadPreview' href="javascript:void(0)"> Download Image </a>
Run Code Online (Sandbox Code Playgroud)
JS
document.getElementById("downloadPreview").addEventListener('click', downloadCanvas, false);
var _canvasObject = new fabric.Canvas('canvas');
var downloadCanvas = function(){
var link = document.createElement("a");
link.href = _canvasObject.toDataURL({format: 'png', multiplier: 4});
link.download = "helloWorld.png";
link.click();
}
Run Code Online (Sandbox Code Playgroud) 我目前有一个Recharts组件,我想将其导出为PNG文件。
<LineChart
id="currentChart"
ref={(chart) => this.currentChart = chart}
width={this.state.width}
height={this.state.height}
data={this.testData}
margin={{top: 5, right: 30, left: 20, bottom: 5}}
>
<XAxis dataKey="name"/>
<YAxis/>
<CartesianGrid strokeDasharray="3 3"/>
<Tooltip/>
<Legend />
<Line type="monotone" dataKey="pv" stroke="#8884d8" activeDot={{r: 8}}/>
<Line type="monotone" dataKey="uv" stroke="#82ca9d"/>
</LineChart>
Run Code Online (Sandbox Code Playgroud)
但是我不确定库是否直接支持此功能。
我的想法涉及使用画布和2D渲染上下文使我接近解决方案,如MDN所述
但是,我不确定将HTML元素(或React组件)呈现为画布以实现此解决方案的通用方法。
我可能会把所有这些都弄错了,我将感谢您的纠正!