HTML5 画布上的图像渐变

gab*_*ish 3 javascript gradient html5-canvas

我想在图像上获得径向渐变效果(alpha = 1中间和边缘透明)。

你对我如何做到这一点有什么想法吗?

pim*_*vdb 5

如果我没有误会你想要做的是:

  1. 绘制图像
  2. 在它上面绘制一个径向渐变,其中边界是透明的,中间是不透明的,并使用globalCompositeOperation上下文中的设置将透明度渐变与图像混合。

您可以很容易地将其转换为代码:http : //jsfiddle.net/W8Ywp/1/

var ctx = $('#cv').get(0).getContext('2d');

var img = new Image();

img.src = 'http://www.netstate.com/states/'
        + 'symb/flowers/images/oklahoma_rose.jpg';

img.onload = function() {
    ctx.drawImage(img, 0, 0, 300, 300); // Draw image

    // Create gradient, from middle to borders
    var gradient = ctx.createRadialGradient(150, 150, 0,
                                            150, 150, 150);

    // Opaque white in the middle
    gradient.addColorStop(0, 'rgba(255,255,255,0)');

    // Transparent white at the borders
    gradient.addColorStop(1, 'rgba(255,255,255,1)');

    ctx.globalCompositeOperation = 'destination-out';
    ctx.fillStyle = gradient;
    ctx.fillRect(0, 0, 300, 300); // Fill rectangle over image with the gradient
};
Run Code Online (Sandbox Code Playgroud)

  • @gabitzish 玩 http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-globalcompositeoperation `ctx.globalCompositeOperation` 设置可能会修复那。 (3认同)
  • 非常好@Alnitak,谢谢!这应该是这篇文章和 http://stackoverflow.com/questions/3320417/is-it-possible-to-make-a-gradient-transparent-layer-masking-image-using-canvas 上标记的正确答案/11757560?noredirect=1#comment45736276_11757560 以及。我喜欢它,谢谢! (2认同)
  • @Alnitak我对它投了赞成票并对已接受的答案发表了评论,人们应该看看你的答案,因为它更快更简单。再次感谢您! (2认同)