相关疑难解决方法(0)

如何使用canvas.toDataURL()将画布保存为图像?

我目前正在构建一个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)

javascript html5 canvas save cordova

125
推荐指数
8
解决办法
29万
查看次数

canvas.toDataURL()SecurityError

所以我使用谷歌地图,我得到的图片,所以它看起来像这样

<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 canvas cors

74
推荐指数
3
解决办法
12万
查看次数

强制浏览器使用Javascript window.open下载图像?

有没有办法让图像一旦点击就下载(没有右键单击保存图像)?

我正在使用一个小的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)

但它不起作用.我究竟做错了什么?
提前致谢!

javascript php

27
推荐指数
3
解决办法
4万
查看次数

在fabric.js中将Canvas作为PNG下载,给出网络错误

我想使用fabric.js将Canvas下载为PNG.在下载时我想缩放图像.所以我使用multipliertoDataURL()函数的属性.但我得到了失败 - 网络错误

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)

html javascript canvas fabricjs

22
推荐指数
2
解决办法
1万
查看次数

将组件重新打包为PNG

我目前有一个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组件)呈现为画布以实现此解决方案的通用方法。

我可能会把所有这些都弄错了,我将感谢您的纠正!

javascript canvas reactjs recharts

5
推荐指数
2
解决办法
3414
查看次数

标签 统计

javascript ×5

canvas ×4

cordova ×1

cors ×1

fabricjs ×1

html ×1

html5 ×1

php ×1

reactjs ×1

recharts ×1

save ×1