2015-02-12 2 views
1

Я хочу сделать что-то подобное на холсте с помощью Javascript.Как размыть fillRect на холсте с помощью Javascript

Я хочу, чтобы размыть квадрат. Я искал его в Интернете, но ничего не нашел. Если мне не нужно использовать внешнюю JS-библиотеку, это будет лучше.

[EDIT] Я не ссылаюсь на Finder Icon, но квадрат, который за ней [/ EDIT]

+0

Какой ящик вы имеете в виду; синяя левая сторона самой левой иконки? Если это помогает, я считаю, что в целом «позиционный переход от одного цвета к другому» называется градиентом *. Это может помочь вам в поиске. Или вы на самом деле имеете в виду эффект гауссова размытия, как то, что вы получаете в Photoshop? – Katana314

+0

Вы уверены, что не хотите округлить квадрат? Изображение не очевидно для соответствия тому, что вы хотите, оно не похоже на «размытый» квадрат. –

+0

Нет, это полностью «размыто». – Arnau

ответ

2

enter image description here

StackOverflow Кен Фирстенберг является автором очень хороший размытости сценарий здесь:.

https://github.com/epistemex/realtime-blur-js

Вот пример, используя размытость Кена плюс подкрашенную 25% непрозрачный прямоугольник:

var canvas=document.getElementById("canvas"); 
 
var ctx=canvas.getContext("2d"); 
 
var cw=canvas.width; 
 
var ch=canvas.height; 
 

 
var img=new Image(); 
 
img.onload=start; 
 
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/wingedLion.jpg"; 
 
function start(){ 
 

 
    var tempcanvas=document.createElement("canvas"); 
 
    var tctx=tempcanvas.getContext("2d"); 
 

 
    cw=canvas.width=tempcanvas.width=img.width; 
 
    ch=canvas.height=tempcanvas.height=img.height; 
 

 
    var x=50; 
 
    var y=250; 
 
    var w=325; 
 
    var h=75; 
 

 
    tctx.drawImage(img,0,0); 
 

 
    var rtblur; 
 
    rtblur=new RTBlur({source:tempcanvas}); 
 
    rtblur.blur(0.50,tctx); 
 

 
    ctx.drawImage(img,0,0); 
 

 
    ctx.drawImage(tempcanvas, x,y,w,h, x,y,w,h); 
 

 
    ctx.fillStyle='tan'; 
 
    ctx.globalAlpha=0.250; 
 
    ctx.fillRect(x,y,w,h); 
 
    ctx.globalAlpha=1.00; 
 
    ctx.strokeStyle='darkgray'; 
 
    ctx.lineWidth=2; 
 
    ctx.strokeRect(x,y,w,h); 
 

 
    ctx.font='18px verdana'; 
 
    ctx.fillStyle='white'; 
 
    ctx.fillText('A rect with blurred background',x+20,y+30); 
 
    ctx.fillText('and a tan 25% opacity tint',x+20,y+55); 
 

 
}
body{ background-color: ivory; padding:10px; } 
 
canvas{border:1px solid red;}
<script src="https://cdn.rawgit.com/epistemex/realtime-blur-js/master/rtblur.js"></script> 
 
<canvas id="canvas" width=300 height=300></canvas>

+1

Спасибо за демонстрацию моего кода (я вижу, мне нужно добавить поддержку для регионов). Также хорошие новости для контекста canvas/2d следующего поколения: он будет иметь собственное свойство 'filter', которое может принимать css-фильтры (включая blur). К сожалению, доступно только в экспериментах/флагах до (вероятно, надеюсь) позже в этом году. – K3N

+0

Добро пожаловать, вы создали хороший сценарий - очень быстро! Регионы были бы полезным дополнением. Хотя я думаю, что размытие всего изображения полезно, если вы хотите анимировать прямоугольник подписи вокруг изображения. Да! Я с нетерпением жду возможности фильтровать-Blend, а также выполнять базовый композитинг. Ура! – markE

+0

Могу ли я размыть часть холста, не создавая другого холста? – Arnau

Смежные вопросы