单击链接完整脚本后将图形另存为图像

Posted

技术标签:

【中文标题】单击链接完整脚本后将图形另存为图像【英文标题】:Save graph as image after click link full script 【发布时间】:2015-04-20 11:11:10 【问题描述】:

我有这个代码

<html>
<head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-2.0.2.js"></script>
    <script type="text/javascript" src="js/chart-js/Chart.js"></script>
    <script type="text/javascript">
        var data = [
            
                value: 300,
                color:"#F7464A",
                highlight: "#FF5A5E",
                label: "Red"
            ,
            
                value: 50,
                color: "#46BFBD",
                highlight: "#5AD3D1",
                label: "Green"
            ,
            
                value: 100,
                color: "#FDB45C",
                highlight: "#FFC870",
                label: "Yellow"
            
        ];

        $(document).ready( 
            function () 
                var ctx = document.getElementById("myChart").getContext("2d");
                var myNewChart = new Chart(ctx).Pie(data);
                document.getElementById("canvas_link").src = document.getElementById("myChart").toDataURL();                 
            
        );
    </script>
</head>
<body>
    <p><a href="#" id="canvas_link">save as image</a></p>
    <canvas id="myChart"  ></canvas>
    <p><a href="">export to pdf</a></p>
</body>

我需要创建 pdf 导出并使用通用图添加到图像中。 Berofe 我必须保存渲染图像。我尝试使用方法 .toBase64Image() 但我不知道我可以开始。

我的继续

创建 canvas_link (.toDataUrl)。单击另存为图像后,我可以放大并将图像上传到服务器。然后我可以生成 pdf 导出(跨 mPDF)并将 imageto 添加到导出中。这个我可以创建,但我不知道创建图形图像并将其上传到服务器。

我需要来自http://www.chartjs.org/docs/的更多示例

【问题讨论】:

【参考方案1】:

在这种情况下,您无需上传为图片。 您可以将调用 toDataUrl 函数的结果放在隐藏字段的值中,并以表单(以 iframe 作为目标)或通过 ajax 调用发送它

在图表中使用以下选项

//new options var
var options = 
    bezierCurve : false,
    //animation: false
    onAnimationComplete: done
;

//your code with a little modification
$(document).ready( 
    function () 
        var ctx = document.getElementById("myChart").getContext("2d");

        //use the previously defined "options" here!!!
        var myNewChart = new Chart(ctx).Pie(data, options);
    
);

//callback function, called when the pie ends his animation
function done()
    //this part of your code was moved here to avoid that store an empty image
    document.getElementById("canvas_link").src = document.getElementById("myChart").toDataURL();

    var postdata=
      file: document.getElementById("myChart").toDataURL()
    
    $.post( "store.php", postdata)
      .done(function( ret ) 
        console.log( "Data status: Loaded successfully ");
      )
      .fail(function( ret ) 
        console.log( "Data status: error ");
      )
    ;

参考:http://api.jquery.com/jquery.post/

在php中你可以这样处理内容

// file: store.php

// Interpret data uri
$uriPhp = 'data://' . substr($file, 5);
// Get content
$binary = file_get_contents($uriPhp);

$file = 'uploads/charts/'. time() .'.png';

// Save image
file_put_contents($file, $binary);

参考:https://github.com/nnnick/Chart.js/issues/99#issuecomment-75359927

【讨论】:

【参考方案2】:

根据documentation,您可以通过API调用print或save图形;

例子

var chart = new CanvasJS.Chart("chartContainer", 
    theme: "theme2",
    title:
        text: "Print Chart using print() method"              
    ,
    data: [              
    
        type: "column",
        dataPoints: [
             label: "apple",  y: 10  ,
             label: "orange", y: 15  ,
             label: "banana", y: 25  ,
             label: "mango",  y: 30  ,
             label: "grape",  y: 28  
        ]
    
    ]
);

chart.render();
document.getElementById("printChart").addEventListener("click",function()
    chart.print();
    //chart.exportChart(format: "jpg");
);     

【讨论】:

虽然例子本身很好,但它引用了不同的图表库。 嗯。我不记得我什么时候提出这个建议了。

以上是关于单击链接完整脚本后将图形另存为图像的主要内容,如果未能解决你的问题,请参考以下文章

用户单击链接时如何强制“另存为”选项

强制打开“另存为...”弹出窗口在文本链接处打开单击以获取 HTML 中的 PDF

html 表单生成链接。当您需要右键单击并“目标另存为”或制作JavaScript书签时非常有用。

在 React 中单击“将图像另存为”

怎样将matlab绘出的图形另存为高精度jpg图片?

打开“另存为”对话框以下载图像