使用新颜色的背景的 CSS 颜色部分

Posted

技术标签:

【中文标题】使用新颜色的背景的 CSS 颜色部分【英文标题】:CSS color part of background with a new color 【发布时间】:2021-09-25 02:58:10 【问题描述】:

我有一个画布元素和该元素内的一些绘图。我想要实现的是改变某些部分的颜色。画布背景是白色的,所以也许我们可以添加一个蒙版来为画布的非白色部分着色。选择的部分是一个矩形,因此很容易实现掩模形状。但是是否可以更改画布某些非白色部分的颜色? 在此先感谢:-)

附:因为画布已经被填充和绘制了,所以我无法更改里面的元素,除非我重新绘制所有需要花费大量时间的东西。

【问题讨论】:

您可以在绘制具有“source-in”值的零件后使用globalCompositeOperation。您能否在这里添加一些示例,如何绘制零件以及您想要实现的目标。 这太迷人了!正是我要寻找的东西,我尝试过面具和剪辑,但无法得到这个。但是'globalCompositionOperation' 只是发挥了魔力!虽然我必须弄清楚如何处理前景形状的重叠......但这是向前迈出的一大步。再次感谢。如果您将其发布为答案,我将确认它已被接受。再次感谢 【参考方案1】:

好的。我有你的问题。要解决这个问题,您必须在元素内创建嵌套。 然后你可以指定元素的位置,背景颜色。 html 代码:

<div class ="default-div">
<p>This is just for example </p>
<div class = "trial-div"></div>
</div>

css代码:

.default-div
width:500px;
height:500px;

.trial-div
  width:100px;
  height:100px;
  margin-left:300px;
  margin-top:300px;
  background-color:red;

您可以根据自己的选择定位元素。

【讨论】:

感谢您的回复。但我不想完全着色。我只是想更改画布某些部分的颜色(比如其中只有一个矩形),以便该矩形内的非白色像素获得新颜色。【参考方案2】:

只是为了理解你的问题,你指的是这样的:

画布元素:

<canvas id="bg"  >
</canvas>
<canvas id="fg"  >
</canvas>

CSS:

#bg 
  background-color: red;
  position: absolute;
  z-index: 0;


#fg 
  background-color: white;
  position: absolute;
  z-index: 1;
  border-radius: 50%;

【讨论】:

【参考方案3】:

globalCompositeOperation 的使用

在某些情况下您可以使用ctx.globalCompositeOperation,但不幸的是,无法仅隔离您想要的部分。之前的所有图纸都将在构图中起作用。

ctx.globalCompositeOperation 用法的一些示例。 canvas 的前半部分是白色的,其他的是透明的。 圆圈有不同的颜色:灰色、黑色和黑色,不透明度为 0.5。 更改 globalCompositeOperation 选项以查看您在不同情况下得到的结果。

首先绘制圆圈,然后是画布大小的黄色矩形。

let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d');
let w = canvas.width = 600;
let h = canvas.height = 180;

draw();

document.getElementById('gco-options').addEventListener('change', e => 
        draw(e.target.value);
)


function draw(gco_val='source-in')

    ctx.clearRect(0,0,w,h);
    
    ctx.save();
    
    ctx.fillStyle = 'white';
    ctx.fillRect(0,0,w/2,h);
    
    ctx.fillStyle = 'gray';
    ctx.beginPath();
    ctx.arc(120,90,80,0,Math.PI*2);
    ctx.fill();
    
    ctx.fillStyle = 'black';
    ctx.beginPath();
    ctx.arc(300,90,80,0,Math.PI*2);
    ctx.fill();
    
    ctx.fillStyle = 'rgba(0,0,0,0.5)';
    ctx.beginPath();
    ctx.arc(480,90,80,0,Math.PI*2);
    ctx.fill();   
    
    ctx.globalCompositeOperation = gco_val;
    
    ctx.fillStyle = 'yellow';
    ctx.fillRect(0,0,w,h);
    
    ctx.restore();
            
    ctx.textAlign = 'center';
    ctx.textBaseline = 'middle';
    ctx.font = 'bold 24px san-serif';
    ctx.fillStyle = 'white';
    ctx.fillText('gray', 120, 90);
    ctx.fillText('black', 300, 90);
    ctx.fillText('rgba(0,0,0,0.5)', 480, 90);
    ctx.strokeText('gray', 120, 90);
    ctx.strokeText('black', 300, 90);
    ctx.strokeText('rgba(0,0,0,0.5)', 480, 90); 
    
<canvas id="canvas"></canvas>
<select id="gco-options" style="position: fixed; top: 5px; left: 5px">
    <option selected>source-in</option>
    <option>source-over</option>
    <option>source-out</option>
    <option>destination-over</option>
    <option>destination-in</option>
    <option>destination-out</option>
    <option>difference</option>
    <option>lighter</option>
    <option>copy</option>
    <option>xor</option>
    <option>multiply</option>
    <option>screen</option>
    <option>overlay</option>
    <option>darken</option>
    <option>lighten</option>
    <option>color-dodge</option>
    <option>color-burn</option>
    <option>hard-light</option>
    <option>soft-light</option>
    <option>exclusion</option>
    <option>hue</option>
    <option>saturation</option>
    <option>color</option>
    <option>luminosity</option>
</select>

【讨论】:

以上是关于使用新颜色的背景的 CSS 颜色部分的主要内容,如果未能解决你的问题,请参考以下文章

css设置背景颜色了,为什么没出来,在设计里有,在网页中就没有?求解

使用 Timer JQuery 更改背景颜色 CSS

使用 CSS,如何根据我悬停的单元格更改表格行的背景颜色?

css如何用一类来改变背景颜色?

怎么设计css网页背景颜色过渡?

使用jquery动态更改背景颜色后,背景颜色的CSS悬停选择器不起作用