Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTML Canvas, blurring drawn polygon

I made this (run snippet below)

 var Canvas = document.getElementById('c');
    var ctx = Canvas.getContext('2d');

    var resize = function() {
        Canvas.width = Canvas.clientWidth;
        Canvas.height = Canvas.clientHeight;
    };
    window.addEventListener('resize', resize);
    resize();

    var elements = [];
    var presets = {};

    presets.shard = function (x, y, s, random, color) {
        return {
            x: x,
            y: y,
            draw: function(ctx, t) {
                this.x += 0;
                this.y += 0;
                var posX = this.x + + Math.sin((50 + x + (t / 10)) / 100) * 5;
                var posy = this.y + + Math.sin((55 + x + (t / 10)) / 100) * 7;
                ctx.beginPath();
                ctx.fillStyle = color;
                ctx.moveTo(posX, posy);
                ctx.lineTo(posX+random,posy+random);
                ctx.lineTo(posX+random,posy+random);
                ctx.lineTo(posX+0,posy+50);
                ctx.closePath();
                ctx.fill();
            }
        }
    };

    for(var x = 0; x < Canvas.width; x++) {
        for(var y = 0; y < Canvas.height; y++) {
            if(Math.round(Math.random() * 60000) == 1) {
                var s = ((Math.random() * 5) + 1) / 10;
                if(Math.round(Math.random()) == 1){
                    var random = Math.floor(Math.random() * 100) + 10;
                    var colorRanges = ['#8c8886', '#9c9995'];
                    var color = colorRanges[Math.floor(Math.random() * colorRanges.length)];
                    elements.push(presets.shard(x, y, s, random, color));
                }
            }
        }
    }

    setInterval(function() {
        ctx.clearRect(0, 0, Canvas.width, Canvas.height);
        var time = new Date().getTime();
        for (var e in elements)
            elements[e].draw(ctx, time);
    }, 10);
<canvas id="c" width="1000" height="1000"\>

I just need to add one feature to be able to use it on the site I'm building it for. Some of the floating shards need to be blurred to give a sense of depth.

Can Canvas do this, and if so, how?

like image 943
jansmolders86 Avatar asked Sep 01 '15 15:09

jansmolders86


2 Answers

context.filter = 'blur(10px)';

https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/filter

like image 82
asdjfiasd Avatar answered Oct 11 '22 16:10

asdjfiasd


I used this few months ago, maybe it could work for you as well :

var canvas = document.getElementById("heroCanvas");
var canvasContext = canvas.getContext("2d");

var canvasBackground = new Image();
canvasBackground.src = "image.jpg";

var drawBlur = function() {
    // Store the width and height of the canvas for below
    var w = canvas.width;
    var h = canvas.height;
    // This draws the image we just loaded to our canvas
    canvasContext.drawImage(canvasBackground, 0, 0, w, h);
    // This blurs the contents of the entire canvas
    stackBlurCanvasRGBA("heroCanvas", 0, 0, w, h, 100);
}

canvasBackground.onload = function() {
    drawBlur();
}

Here the source : http://zurb.com/playground/image-blur-texture

like image 27
Majestic Avatar answered Oct 11 '22 16:10

Majestic