Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在画布上绘制单色图像,但使用不同的颜色?_Javascript_Html_Html5 Canvas - Fatal编程技术网

Javascript 如何在画布上绘制单色图像,但使用不同的颜色?

Javascript 如何在画布上绘制单色图像,但使用不同的颜色?,javascript,html,html5-canvas,Javascript,Html,Html5 Canvas,我有一张黑白照片。如有必要,我可以将其转换为透明和白色 如何将此图像绘制到画布上,用任意颜色替换白色 我想能够绘制到画布上的文字使用如下字体,使用不同的颜色。我不想有图像的多个副本 最简单的方法是将图像中的白色替换为所需颜色的透明“孔”,然后使用.fillstyle更改画布的背景 将图像另存为png,打开一些照片编辑软件,在图像上你想要的颜色处擦出一个洞,这样你就能看到格子状的透明背景 将此文件移动到项目中存储图像的任何位置 将图像添加到画布元素,确保它填充整个画布。使用以下代码更改画布的背景

我有一张黑白照片。如有必要,我可以将其转换为透明和白色

如何将此图像绘制到画布上,用任意颜色替换白色

我想能够绘制到画布上的文字使用如下字体,使用不同的颜色。我不想有图像的多个副本

  • 最简单的方法是将图像中的白色替换为所需颜色的透明“孔”,然后使用
    .fillstyle
    更改画布的背景
  • 将图像另存为png,打开一些照片编辑软件,在图像上你想要的颜色处擦出一个洞,这样你就能看到格子状的透明背景
  • 将此文件移动到项目中存储图像的任何位置
  • 将图像添加到画布元素,确保它填充整个画布。使用以下代码更改画布的背景:
let canvas=document.getElementByID(“colorthis”)
让ctx=canvas.getContext(“2D”)
ctx.fillstyle='red'

  • 图像的透明部分现在将为红色
  • 您可以使用某种随机化器来实现其他颜色
  • 使用
    ctx.fillStyle=“transparent”
    获取透明背景
这就是我在vanilla JS中所做的,没有JQuery或任何东西。还有其他方法,但从您使用的标签来看,我怀疑您是否在使用任何插件来实现这类功能。

  • 最简单的方法是将图像中的白色替换为所需颜色的透明“孔”,然后使用
    .fillstyle
    更改画布的背景
  • 将图像另存为png,打开一些照片编辑软件,在图像上你想要的颜色处擦出一个洞,这样你就能看到格子状的透明背景
  • 将此文件移动到项目中存储图像的任何位置
  • 将图像添加到画布元素,确保它填充整个画布。使用以下代码更改画布的背景:
let canvas=document.getElementByID(“colorthis”)
让ctx=canvas.getContext(“2D”)
ctx.fillstyle='red'

  • 图像的透明部分现在将为红色
  • 您可以使用某种随机化器来实现其他颜色
  • 使用
    ctx.fillStyle=“transparent”
    获取透明背景

这就是我在vanilla JS中所做的,没有JQuery或任何东西。还有其他方法,但从您使用的标签来看,我怀疑您是否在使用任何插件来实现这类功能。

有两种方法可以做到这一点

屏幕外 创建屏幕外画布,将文本渲染到该画布,然后使用
ctx.globalCompositeOperation=“color”
(更新my bad,即
ctx.globalCompositeOperation=“destination in”
)首先绘制颜色,然后在颜色上绘制文本。(见示例)

上述方法的示例
canvas.width=430;
高度=16;
const ctx=canvas.getContext(“2d”);
//屏幕外画布
const text=document.createElement(“画布”);
text.width=512;
text.height=16;
text.ctx=text.getContext(“2d”);
const font=新图像;
font.src=”https://i.stack.imgur.com/VXaVG.png"
font.addEventListener(“加载”,()=>{
drawColorString(“000黑色文本#F00红色文本#FF0黄色#0F0绿色#0FF青色#00F蓝色#F0F洋红色”,10,4);
});
const grad=ctx.createLinearGradient(0,0,canvas.width,canvas.height);
渐变加色停止(0,#FFF);
渐变添加颜色停止(1,#000);
ctx.fillStyle=梯度;
ctx.fillRect(0,0,canvas.width,canvas.height);
函数drawColorString(str、xpos、ypos){
const parts=str.split(“#”);
var x=0;
用于(零件的常量部分){
常量颜色=部分切片(0,3);
常量字符=部分切片(3);
for(字符的常量字符){
drawChar(char,color,x);
x+=8;
}
}
彩色文本();
ctx.drawImage(文本、xpos、YPO);
}
函数colorText(){
text.ctx.globalCompositeOperation=“目的地在”;
text.ctx.drawImage(text,0,8,text.width,8,0,0,text.width,8);
text.ctx.globalCompositeOperation=“源代码结束”;
}
函数drawChar(char、color、xpos){
常数c=char.charCodeAt(0);
常数x=(c%32)*8;
常数y=(c/32 | 0)*8;
text.ctx.fillStyle=“#”+颜色;
text.ctx.fillRect(xpos,0,8,8);
text.ctx.drawImage(字体,x,y,8,8,xpos,8,8,8);
}
画布{
边框:1px纯黑;
}

有两种方法可以做到这一点

屏幕外 创建屏幕外画布,将文本渲染到该画布,然后使用
ctx.globalCompositeOperation=“color”
(更新my bad,即
ctx.globalCompositeOperation=“destination in”
)首先绘制颜色,然后在颜色上绘制文本。(见示例)

上述方法的示例
canvas.width=430;
高度=16;
const ctx=canvas.getContext(“2d”);
//屏幕外画布
const text=document.createElement(“画布”);
text.width=512;
text.height=16;
text.ctx=text.getContext(“2d”);
const font=新图像;
font.src=”https://i.stack.imgur.com/VXaVG.png"
font.addEventListener(“加载”,()=>{
drawColorString(“000黑色文本#F00红色文本#FF0黄色#0F0绿色#0FF青色#00F蓝色#F0F洋红色”,10,4);
});
const grad=ctx.createLinearGradient(0,0,canvas.width,canvas.height);
渐变加色停止(0,#FFF);
渐变添加颜色停止(1,#000);
ctx.fillStyle=梯度;
ctx.fillRect(0,0,canvas.width,canvas.height);
函数drawColorString(str、xpos、ypos){
const parts=str.split(“#”);
var x=0;
用于(零件的常量部分){
常量颜色=部分切片(0,3);
常量字符=部分切片(3);
for(字符的常量字符){