【问题标题】:How to remove transparency from images downloaded in Chart.js如何从 Chart.js 中下载的图像中删除透明度
【发布时间】:2022-01-20 00:09:18
【问题描述】:

如何使用 Chart.js 中的 toBase64Image() 函数从下载的图像中删除不透明度? 如果可能,请保存为 JPG 而不是 PNG。 这是代码:

const myChart = new Chart(ctx, {
    type: 'bar',
    data: {
        labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
        datasets: [{
            label: '# of Votes',
            data: [12, 19, 3, 5, 2, 3],
            backgroundColor: [
                'rgba(255, 99, 132, 0.2)',
                'rgba(54, 162, 235, 0.2)',
                'rgba(255, 206, 86, 0.2)',
                'rgba(75, 192, 192, 0.2)',
                'rgba(153, 102, 255, 0.2)',
                'rgba(255, 159, 64, 0.2)'
            ],
            borderColor: [
                'rgba(255, 99, 132, 1)',
                'rgba(54, 162, 235, 1)',
                'rgba(255, 206, 86, 1)',
                'rgba(75, 192, 192, 1)',
                'rgba(153, 102, 255, 1)',
                'rgba(255, 159, 64, 1)'
            ],
            borderWidth: 1
        }]
    },
    options: {
        scales: {
            y: {
                beginAtZero: true
            }
        },
        animation: {
            onComplete: function() {
                image = graficoConsumo.toBase64Image();
            }
        }
    }
});
document.getElementById('btn-download-chart').onclick = function() {
        // Trigger the download
        var a = document.createElement('a');
        a.href = image;
        a.download = 'myChart.png';
        a.click();
}

【问题讨论】:

    标签: javascript jquery chart.js


    【解决方案1】:

    默认情况下,画布没有背景,因此它始终是透明的。要解决此问题,您可以编写一个小型自定义插件,在 chart.js 在其上绘制内容之前绘制白色背景:

    Chart.register({
      id: 'customBackground',
      beforeDraw: (chart, args, opts) => {
        const ctx = chart.canvas.getContext('2d');
        ctx.save();
        ctx.globalCompositeOperation = 'destination-over';
        ctx.fillStyle = 'white';
        ctx.fillRect(0, 0, chart.width, chart.height);
        ctx.restore();
      }
    })
    
    const options = {
      type: 'line',
      data: {
        labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
        datasets: [{
            label: '# of Votes',
            data: [12, 19, 3, 5, 2, 3],
            borderColor: 'orange'
          },
          {
            label: '# of Points',
            data: [7, 11, 5, 8, 3, 7],
            borderColor: 'pink'
          }
        ]
      },
      options: {},
    }
    
    const ctx = document.getElementById('chartJSContainer').getContext('2d');
    new Chart(ctx, options);
    body {
      background-color: black;
    }
    <body>
      <canvas id="chartJSContainer" width="600" height="400"></canvas>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.6.2/chart.js"></script>
    </body>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 2019-08-24
      • 2010-10-11
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多