Search code examples
html5-canvasblobchart.jsfilesaver.js

How to save Chart JS charts as image without black background using blobs and filesaver?


$("#NoBidsChart").get(0).toBlob(function(value) {
    saveAs(value, "Summary.jpg");
});

Here i am using Chart JS(v2.5.0) for rendering charts. When i try to export the charts using Canvas to Blob converter and filesaver.js, i get the black background. So how do i get the image with customized background color(preferably white)?


Solution

  • If you want a customized background color then, you'd have to draw a background with your preferred color, and you can do so, like this ...

    var backgroundColor = 'white';
    Chart.plugins.register({
        beforeDraw: function(c) {
            var ctx = c.chart.ctx;
            ctx.fillStyle = backgroundColor;
            ctx.fillRect(0, 0, c.chart.width, c.chart.height);
        }
    });
    

    DEMO

    // draw background
    var backgroundColor = 'white';
    Chart.plugins.register({
        beforeDraw: function(c) {
            var ctx = c.chart.ctx;
            ctx.fillStyle = backgroundColor;
            ctx.fillRect(0, 0, c.chart.width, c.chart.height);
        }
    });
    
    // chart
    var canvas = $('#NoBidsChart').get(0);
    var myChart = new Chart(canvas, {
        type: 'line',
        data: {
            labels: [1, 2, 3, 4, 5],
            datasets: [{
                label: 'Line Chart',
                data: [1, 2, 3, 4, 5],
                backgroundColor: 'rgba(255, 0, 0, 0.2)',
                borderColor: 'rgba(255, 0, 0, 0.5)',
                pointBackgroundColor: 'black'
            }]
        }
    });
    
    // save as image
    $('#save').click(function() {
        canvas.toBlob(function(blob) {
            saveAs(blob, "pretty image.png");
        });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.3/FileSaver.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script>
    <button id="save">Save</button>
    <canvas id="NoBidsChart"></canvas>