<legend id='GY92k'><style id='GY92k'><dir id='GY92k'><q id='GY92k'></q></dir></style></legend>

      <bdo id='GY92k'></bdo><ul id='GY92k'></ul>

    <small id='GY92k'></small><noframes id='GY92k'>

    1. <i id='GY92k'><tr id='GY92k'><dt id='GY92k'><q id='GY92k'><span id='GY92k'><b id='GY92k'><form id='GY92k'><ins id='GY92k'></ins><ul id='GY92k'></ul><sub id='GY92k'></sub></form><legend id='GY92k'></legend><bdo id='GY92k'><pre id='GY92k'><center id='GY92k'></center></pre></bdo></b><th id='GY92k'></th></span></q></dt></tr></i><div id='GY92k'><tfoot id='GY92k'></tfoot><dl id='GY92k'><fieldset id='GY92k'></fieldset></dl></div>

    2. <tfoot id='GY92k'></tfoot>

        设置背景颜色以保存画布图表

        set background color to save canvas chart(设置背景颜色以保存画布图表)
        <tfoot id='I7BcQ'></tfoot>
          • <bdo id='I7BcQ'></bdo><ul id='I7BcQ'></ul>
            <i id='I7BcQ'><tr id='I7BcQ'><dt id='I7BcQ'><q id='I7BcQ'><span id='I7BcQ'><b id='I7BcQ'><form id='I7BcQ'><ins id='I7BcQ'></ins><ul id='I7BcQ'></ul><sub id='I7BcQ'></sub></form><legend id='I7BcQ'></legend><bdo id='I7BcQ'><pre id='I7BcQ'><center id='I7BcQ'></center></pre></bdo></b><th id='I7BcQ'></th></span></q></dt></tr></i><div id='I7BcQ'><tfoot id='I7BcQ'></tfoot><dl id='I7BcQ'><fieldset id='I7BcQ'></fieldset></dl></div>
            • <small id='I7BcQ'></small><noframes id='I7BcQ'>

                <tbody id='I7BcQ'></tbody>

              <legend id='I7BcQ'><style id='I7BcQ'><dir id='I7BcQ'><q id='I7BcQ'></q></dir></style></legend>

                • 本文介绍了设置背景颜色以保存画布图表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  Im using ChartJS and saving them locally, converting the chart image on canvas to data blob and then save it. But I'm having trouble setting background color of whatever canvas chart im saving, i can only save the chart without background color, confusing the user.

                  What I've tried so far was:

                  1. Change the type of image/png to image/jpg
                  2. Create a document with a style and append it as a child to my document.createElement which is going to have the image
                  3. give style to my 'link' that is equal to the document.createElement above

                  But no success, the image is corrctely downloaded without background.

                  i was searching and found some topic:

                  create a canvas with background image and save

                  save canvas with background image

                  but, at the end of all the work, wasn't abble to find the solution for me.

                  My chart on html is:

                  <canvas id="divName"></canvas>
                  

                  the typescript function to save the image, creating a new blob with bytearray and the type of the image is: (that code has all the tries to add background color)

                  saveimg(divName){
                        let canvas:any;
                  
                          let style = document.createElement('style');
                          style.type = 'text/css';
                          style.innerHTML = '.cssClass { background-color: "aquamarine"; }';
                  
                          if(this.deviceValue != null) {
                            canvas = document.getElementById(this.deviceValue);
                        }
                        else {
                            canvas = document.getElementById(divName);
                        }
                  
                  //SOLUTION that works BY Caleb Miller ***********
                  fillCanvasBackground(canvas, 'white');
                  
                  function fillCanvasBackground(canvasc, color)
                  {
                     const context = canvasc.getContext('2d');
                     context.save();
                     context.globalCompositeOperation = 'destination-over';
                     context.fillStyle = color;
                     context.fillRect(0, 0, canvasc.width, canvasc.height);
                     context.restore();
                  }
                  // end***********************
                  
                          let dataURL = canvas.toDataURL();
                          let datablob = dataURL.substring(dataURL.indexOf(",") + 1);
                  
                       let byteCharacters = atob(datablob);
                       let byteNumbers = new Array(byteCharacters.length);
                       for (let i = 0; i < byteCharacters.length; i++) {
                           byteNumbers[i] = byteCharacters.charCodeAt(i);
                       }
                  
                       let byteArray = new Uint8Array(byteNumbers);
                       let blob = new Blob([byteArray], {"type": "image/jpg"});
                  
                  
                       if(navigator.msSaveBlob){
                           let filename = this.chartTitle + ' - ' + this.entityName;
                           navigator.msSaveBlob(blob, filename);
                       } else {
                           let filename =this.chartTitle + ' - ' + this.entityName;
                           let link = document.createElement("a");
                  
                           link.onload = function() {
                               canvas.drawImage(0,0);
                           };
                  
                           document.getElementsByTagName('a')[0].appendChild(style);
                           link.href = URL.createObjectURL(blob);
                           link.setAttribute('visibility','hidden');
                           link.download = filename;
                           link.style.backgroundColor = "lightblue repeat-x center";
                  
                           document.body.appendChild(link).style.background = "lightblue repeat-x center";
                           link.click();
                           document.body.removeChild(link);
                       }
                          this.deviceValue = null;
                      }
                  

                  Images to express the problem:

                  on the site the image is:

                  when i download it

                  is it possible to add background color to a canvas image?

                  解决方案

                  As you discovered, canvas.toDataURL() does not capture any visual styling applied via CSS. It only captures the raw pixel data from the bitmap backing the canvas instance. This is by design.

                  In order to use a custom background color, you need to draw it directly to the canvas. Here is an example of a function that fills the background of a given canvas with a given color. My inline comments should explain how it works.

                  function fillCanvasBackgroundWithColor(canvas, color) {
                    // Get the 2D drawing context from the provided canvas.
                    const context = canvas.getContext('2d');
                  
                    // We're going to modify the context state, so it's
                    // good practice to save the current state first.
                    context.save();
                  
                    // Normally when you draw on a canvas, the new drawing
                    // covers up any previous drawing it overlaps. This is
                    // because the default `globalCompositeOperation` is
                    // 'source-over'. By changing this to 'destination-over',
                    // our new drawing goes behind the existing drawing. This
                    // is desirable so we can fill the background, while leaving
                    // the chart and any other existing drawing intact.
                    // Learn more about `globalCompositeOperation` here:
                    // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation
                    context.globalCompositeOperation = 'destination-over';
                  
                    // Fill in the background. We do this by drawing a rectangle
                    // filling the entire canvas, using the provided color.
                    context.fillStyle = color;
                    context.fillRect(0, 0, canvas.width, canvas.height);
                  
                    // Restore the original context state from `context.save()`
                    context.restore();
                  }
                  

                  To use the function, call it before your save code, giving it the chart canvas and a color. It should look something like this:

                  const canvas = document.getElementById('yourCanvasId');
                  fillCanvasBackgroundWithColor(canvas, 'aquamarine');
                  // ...the rest of your save code
                  

                  The saved image should have a background color.

                  这篇关于设置背景颜色以保存画布图表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  在开发JS过程中,会经常遇到两个小数相运算的情况,但是运算结果却与预期不同,调试一下发现计算结果竟然有那么长一串尾巴。如下图所示: 产生原因: JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会
                  问题描述: 在javascript中引用js代码,然后导致反斜杠丢失,发现字符串中的所有\信息丢失。比如在js中引用input type=text onkeyup=value=value.replace(/[^\d]/g,) ,结果导致正则表达式中的\丢失。 问题原因: 该字符串含有\,javascript对字符串进行了转
                  Rails/Javascript: How to inject rails variables into (very) simple javascript(Rails/Javascript:如何将 rails 变量注入(非常)简单的 javascript)
                  CoffeeScript always returns in anonymous function(CoffeeScript 总是以匿名函数返回)
                  Ordinals in words javascript(javascript中的序数)
                  getFullYear returns year before on first day of year(getFullYear 在一年的第一天返回前一年)

                    <tbody id='dVFTc'></tbody>
                  <i id='dVFTc'><tr id='dVFTc'><dt id='dVFTc'><q id='dVFTc'><span id='dVFTc'><b id='dVFTc'><form id='dVFTc'><ins id='dVFTc'></ins><ul id='dVFTc'></ul><sub id='dVFTc'></sub></form><legend id='dVFTc'></legend><bdo id='dVFTc'><pre id='dVFTc'><center id='dVFTc'></center></pre></bdo></b><th id='dVFTc'></th></span></q></dt></tr></i><div id='dVFTc'><tfoot id='dVFTc'></tfoot><dl id='dVFTc'><fieldset id='dVFTc'></fieldset></dl></div>
                    <bdo id='dVFTc'></bdo><ul id='dVFTc'></ul>

                          <small id='dVFTc'></small><noframes id='dVFTc'>

                          <legend id='dVFTc'><style id='dVFTc'><dir id='dVFTc'><q id='dVFTc'></q></dir></style></legend>
                          <tfoot id='dVFTc'></tfoot>