勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

Chart.jsで描写したグラフを画像としてダウンロードさせる方法

  JavaScript

サイト内にChart.jsでグラフを描写し、ボタンやリンクをクリックすることで当該グラフを画像としてダウンロードさせたかった。追加のプラグイン等が必要かと思って調べたところ、標準搭載されているAPIで対応できるみたい。以下に対応方法及びサンプルをメモ。

 

サンプル

https://taitan916.info/sample/chart.js/image_download/

ページ左下の「ダウンロード」ボタンをクリックするとgraph.pngがダウンロードされる筈。

 

対応方法

ソースコード

<canvas id="graph"></canvas>
<button id="download">ダウンロード</button>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const ctx = document.querySelector('#graph').getContext('2d');
const myChart = new Chart(ctx, {
    type: 'line',
    data: {
        labels: ['1月', '2月', '3月', '4月', '5月', '6月'],
        datasets: [
            {
                label: '売り上げ',
                data: [100, 200, 80, 160, 90, 110]
            }
        ]
    },
    options: {
        title: {
            display: true,
            text: '折れ線グラフ'
        },
        scales: {
            y: {
                suggestedMin: 0,
                suggestedMax: 300
            }
        }
    }
});

const image = myChart.toBase64Image();

document.querySelector('#download').onclick = function() {
    const a = document.createElement('a');
    a.href = myChart.toBase64Image();
    a.download = 'graph.png';
    a.click();
}
</script>

 

リファレンス

.toBase64Image

https://www.chartjs.org/docs/latest/developers/api.html#tobase64image-type-quality

 - JavaScript

  関連記事

JavaScriptにて電子書籍や漫画ビューア用のライブラリ「ToraViewer」の利用方法

電子書籍や漫画ビューア用を設置したい。条件としてはレスポンシブ対応していること。 ...

PHPで画像を分割し並べ替えて出力したものをJavaScriptで復元する方法

ある電子書籍サイトをブラウザの開発者ツールで見てみたところ、PHPでページ画像を ...

Lightboxで画像拡大時にダウンロードリンクを設置する方法

Lightboxで画像拡大時にダウンロードリンクを設置したいと要望を受けた。もち ...

「slick」で作成したスライダー画像にランキングの順位を表示する方法

「slick」で作成したスライダー画像に対して、ランキングの順位を表示したいとい ...

バニラJS対応(jQuery非依存)の画像遅延読み込みライブラリ「lazysizes」の利用方法

あるサイトのコーディングデータを貰った際に「lazysizes」というJavaS ...