gpt4 book ai didi

html - 如何在 HTML5 Canvas 中显示更平滑的渐变?

转载 作者:行者123 更新时间:2023-12-02 21:16:46 25 4
gpt4 key购买 nike

我的网页中有一个 html5 Canvas 。我只在其中放置了图像和渐变。

Canvas 使用丰富的 JS 代码来绘制自身:

var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
ctx.clearRect ( 0 , 0 , canvas.width, canvas.height );
var img = document.getElementById("slika");
ctx.drawImage(img, 0, 0,canvas.width,canvas.height);
var grd = ctx.createLinearGradient(x-400, 0, x, 0)
grd.addColorStop(0.3,"hsla(360, 100%, 100%, 0)");
grd.addColorStop(1,"hsla(360, 100%, 100%, 0.8)");
ctx.fillStyle=grd;
ctx.fillRect(0,0,canvas.width,canvas.height);

ctx.font = "70px Arial";
ctx.fillStyle = "black"
ctx.textAlign = "right";
ctx.fillText(textInput,canvas.width-50,canvas.height-120);

当它显示时,过渡不是很平滑,它只是从某处开始并在某处结束。

看起来像这样:

http://kendaj.net46.net/canvas-StackOverflow.png

我希望过渡更加平滑(我不是指更宽的渐变)。

有什么办法可以做到这一点吗?

感谢您的回答。

最佳答案

使用基于 s 斜率的渐变,可以使用 escape-in​​-out 函数定义该渐变。这样,平面和线性之间的过渡就平滑了。您可能需要对宽度进行一些补偿,因为初始值和最终值比线性方法更接近平坦值。

easing

示例

result

var ctx = document.querySelector("canvas").getContext("2d"), img = new Image();
img.onload = function() {

// init canvas and image
ctx.canvas.width = this.naturalWidth;
ctx.canvas.height = this.naturalHeight;
ctx.drawImage(this, 0, 0);

// gradient using ease-in-out
var comp = 100;
var grd = ctx.createLinearGradient(550 - comp, 0, 700 + comp, 0);

for(var t = 0; t <= 1; t += 0.02) { // convert linear t to "easing" t:
grd.addColorStop(t, "hsla(360, 100%, 100%, " + easeInOut(t) * 0.8 + ")");
}

ctx.fillStyle = grd;
ctx.fillRect(0,0, ctx.canvas.width, ctx.canvas.height * 0.5);

// linear (as before)
var grd = ctx.createLinearGradient(550, 0, 700, 0);
grd.addColorStop(0, "hsla(360, 100%, 100%, 0)");
grd.addColorStop(1, "hsla(360, 100%, 100%, 0.8)");
ctx.fillStyle = grd;
ctx.fillRect(0,ctx.canvas.height * 0.5+1, ctx.canvas.width, ctx.canvas.height * 0.5);
};

function easeInOut(t) {return t<.5 ? 4*t*t*t : (t-1)*(2*t-2)*(2*t-2)+1}

img.src = "//i.imgur.com/ESyzwQg.png";
canvas {width:100%; height:auto}
<canvas></canvas>

关于html - 如何在 HTML5 Canvas 中显示更平滑的渐变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30196043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com