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

      1. <small id='efOOV'></small><noframes id='efOOV'>

        如何在画布上重新着色灰度图像

        How to re-tint a grayscale image on canvas(如何在画布上重新着色灰度图像)

      2. <small id='QsFoG'></small><noframes id='QsFoG'>

        <tfoot id='QsFoG'></tfoot>

          <legend id='QsFoG'><style id='QsFoG'><dir id='QsFoG'><q id='QsFoG'></q></dir></style></legend>
              <tbody id='QsFoG'></tbody>

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

                  本文介绍了如何在画布上重新着色灰度图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  在画布上绘制灰度图标(具有透明背景的 png 图像)时,是否有任何快速着色的方法?通过着色我的意思是把灰度图标变成绿色(给定颜色而不是灰色的阴影来匹配给定的颜色主题)

                  Is there any quick way to colorize greyscale icon (png image with transparent background) when drawing it on canvas? By colorize I mean turning greyscale icon into lets say greenscale (shades of given color instead of grey to match given color theme)

                  我知道我可以手动操作每个像素,但也许有一些更自动化的方法?

                  I know I could manipulate each pixel manually but maybe there's some more automated way?

                  推荐答案

                  使用合成将灰度图像重新着色为greenscale".

                  使用合成比像素操作更快,并且作为奖励,您不会违反跨域安全限制(如果您使用 getImageData 则可以这样做).

                  Using compositing is faster than pixel manipulation and as a bonus you won't run afoul of cross-domain security restrictions (which you do if you instead used getImageData).

                  1. 为您的图片创建一个完全绿色的版本.
                  2. 在画布上绘制灰度图像.
                  3. 设置 globalCompositeOperation='color',这会使现有灰度像素重新着色(重新着色"),并在顶部绘制像素.
                  4. 在画布上绘制您的全绿色图像.
                  1. Create a fully green version of your image.
                  2. Draw your grayscale image on the canvas.
                  3. Set globalCompositeOperation='color' which causes existing grayscale pixels to be re-tinted ("re-hued") with pixels drawn on top.
                  4. Draw your fully green image on the canvas.

                  颜色"合成会将灰度变为绿色.

                  + =

                  注意:需要具有混合功能的现代浏览器(Edge 而不是 IE)

                  示例代码和演示:

                  var canvas=document.getElementById("canvas");
                  var ctx=canvas.getContext("2d");
                  var cw=canvas.width;
                  var ch=canvas.height;
                  
                  var img=new Image();
                  img.onload=start;
                  img.src="https://dl.dropboxusercontent.com/u/139992952/multple/koolBW.png";
                  function start(){
                  
                      // create a fully green version of img
                      var c=document.createElement('canvas');
                      var cctx=c.getContext('2d');
                      c.width=img.width;
                      c.height=img.height;
                      cctx.drawImage(img,0,0);
                      cctx.globalCompositeOperation='source-atop';
                      cctx.fillStyle='green';
                      cctx.fillRect(0,0,img.width,img.height);  
                      cctx.globalCompositeOperation='source-over';
                  
                      // draw the grayscale image onto the canvas
                      ctx.drawImage(img,0,0);
                  
                      // set compositing to color (changes hue with new overwriting colors) 
                      ctx.globalCompositeOperation='color';
                  
                      // draw the fully green img on top of the grayscale image
                      // ---- the img is now greenscale ----
                      ctx.drawImage(c,0,0);
                      
                      // Always clean up -- change compositing back to default
                      ctx.globalCompositeOperation='source-over';
                  }

                  body{ background-color:white; }
                  #canvas{border:1px solid red; }

                  <canvas id="canvas" width=256 height=256></canvas>

                  这篇关于如何在画布上重新着色灰度图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

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

                  相关文档推荐

                  Draw border around nontransparent part of image on canvas(在画布上的图像不透明部分周围绘制边框)
                  dragging and resizing an image on html5 canvas(在 html5 画布上拖动图像并调整其大小)
                  What#39;s the difference between a boolean as primitive and a boolean as property of an object?(作为原始对象的布尔值和作为对象属性的布尔值有什么区别?)
                  I want to do animation of an object along a particular path(我想沿特定路径对对象进行动画处理)
                  How to upload image into HTML5 canvas(如何将图像上传到 HTML5 画布中)
                  How to show a running progress bar while page is loading(如何在页面加载时显示正在运行的进度条)
                1. <legend id='rtftM'><style id='rtftM'><dir id='rtftM'><q id='rtftM'></q></dir></style></legend>

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

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