HTML5模糊图像需要在项目中使用,该项目已在GDI、GDI+中实现,以及如何在HTML5中实现。
1.createimagedata()
2.getimagedata()
3.putimagedata()
以上3个功能都可以实现,而且用法,它们的百度,我不会重复叙述,没有多大意义。

下面是实现模糊算法的js。事实上,还有一个2B级算法,即分布矩阵,提高了效率,很多次,但效果很差,和羽化的作用不强。
实现代码:
复制代码代码如下所示:
无功mul_table = {
512512456512328456335512405328271456388335292512,
454405364328298271496456420388360335312292273512,
482454428405383364345328312298284271259496475456,
437420404388374360347335323312302292282273265512,
497482468454441428417405394383373364354345337328,
320312305298291284278271265259507496485475465456,
446437428420412404396388381374367360354347341335,
329323318312307302297292287282278273269265261512,
505497489482475468461454447441435428422417411405,
399394389383378373368364359354350345341337332328,
324320316312309305301298294291287284281278274271,
268265262259257507501496491485480475470465460456,
451446442437433428424420416412408404400396392388,
385381377374370367363360357354350347344341338335,
332329326323320318315312310307304302299297294292,
289287285282280278275273271269267265263261259 };


无功shg_table = {
9, 11, 12,13, 13, 14,14, 15, 15,15, 15, 16,16, 16, 16。
17, 17, 17,17, 17, 17,18, 18, 18,18, 18, 18,18, 18, 18。
19, 19, 19,19, 19, 19,19, 19, 19,19, 19, 19,19, 19, 20。
20, 20, 20,20, 20, 20,20, 20, 20,20, 20, 20,20, 20, 20。
21, 21, 21,21, 21, 21,21, 21, 21,21, 21, 21,21, 21, 21。
21, 21, 21,21, 21, 21,21, 21, 21,21, 22, 22,22, 22, 22。
22, 22, 22,22, 22, 22,22, 22, 22,22, 22, 22,22, 22, 22。
22, 22, 22,22, 22, 22,22, 22, 22,22, 22, 22,22, 22, 22。
23, 23, 23,23, 23, 23,23, 23, 23,23, 23, 23,23, 23, 23。
23, 23, 23,23, 23, 23,23, 23, 23,23, 23, 23,23, 23, 23。
23, 23, 23,23, 23, 23,23, 23, 23,23, 23, 23,23, 23, 23。
23, 23, 23,23, 23, 24,24, 24, 24,24, 24, 24,24, 24, 24。
24, 24, 24,24, 24, 24,24, 24, 24,24, 24, 24,24, 24, 24。
24, 24, 24,24, 24, 24,24, 24, 24,24, 24, 24,24, 24, 24。
24, 24, 24,24, 24, 24,24, 24, 24,24, 24, 24,24, 24, 24。
24, 24, 24,24, 24, 24,24, 24, 24,24, 24, 24,24, 24,;

功能stackblurimage(imageid,canvasid,半径,bluralphachannel)
{

VaR img = document.getelementbyid(imageid);
无功W = img.naturalwidth;
var H = img.naturalheight;

VaR的画布document.getelementbyid(canvasid);

canvas.style.width = W +PX;
canvas.style.height = H +PX;
canvas.width = W;
canvas.height = H;

VaR上下文= canvas.getcontext(2D);
context.clearrect(0, 0,W,H);
context.drawimage(1mg,0, 0);

如果(isnan(半径)| |半径<1回);

如果(bluralphachannel)
StackBlurCanvasRGBA(canvasid,0, 0,W,H,半径);
其他的
StackBlurCanvasRGB(canvasid,0, 0,W,H,半径);
}


功能stackblurcanvasrgba(ID,top_x,top_y、宽度、高度、半径)
{
如果(isnan(半径)| |半径<1回);
半径| = 0;

VaR的画布document.getelementbyid(ID);
VaR上下文= canvas.getcontext(2D);
VaR数据;

{试
{试
数据= context.getimagedata(top_x,top_y,宽度,高度);
} catch(e){


{试
netscape.security.privilegemanager.enableprivilege(universalbrowserread );
数据= context.getimagedata(top_x,top_y,宽度,高度);
} catch(e){
警报(无法访问本地图像);
抛出新错误()无法访问本地图像数据:;
返回;
}
}
} catch(e){
警报(无法访问图像);
抛出新错误()无法访问图像数据:;
}

VaR像素= imagedata.data;

变量x,y,I,P,YP,毅伟,r_sum,g_sum,b_sum,a_sum,
r_out_sum,g_out_sum,b_out_sum,a_out_sum,
R_in_sum, g_in_sum, b_in_sum, a_in_sum,
公关,PG,PB,PA,苏格兰皇家银行;

半径=半径+ 1;
VaR W4 =宽度<<2;
无功widthminus1 =宽度1;
无功heightminus1 =高度1;
无功radiusplus1 =半径+ 1;
无功sumfactor = radiusplus1 *(radiusplus1 + 1)/ 2;

无功stackstart =新blurstack();
var = stackstart堆栈;
对于(i = 1;i <;;+(+))
{
栈= stack.next =新blurstack();
如果(我= = radiusplus1)var =栈stackend;
}
stack.next = stackstart;
var stackin = null;
无功stackout = null;

YW =一= 0;

无功mul_sum = mul_table {半径};
无功shg_sum = shg_table {半径};

对于(y = 0;y <高度;y + +)
{
r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0;

r_out_sum = radiusplus1 *(PR =像素{一});
g_out_sum = radiusplus1 *(PG =像素{一+ 1 });
b_out_sum = radiusplus1 *(PB =像素{一+ 2 });
a_out_sum = radiusplus1 *(PA =像素{一+ 3 });

r_sum = sumfactor *公关;
g_sum = sumfactor * PG;
b_sum = sumfactor *铅;
a_sum = sumfactor * PA;

栈= stackstart;

为(i = 0;i < radiusplus1;i++)
{
堆栈;
堆栈;
堆栈;
栈;
栈= stack.next;
}

为(i = 1;i < radiusplus1;i++)
{
P =一+((widthminus1 <我widthminus1:我)<< 2);
(r_sum =栈。R =(PR =像素{ p }))*(RBS = radiusplus1 -我);
(g_sum =栈。G =(PG =像素{ p + 1 })* RBS);
(b_sum =栈。B =(PB =像素{ p + 2 })* RBS);
(a_sum =栈。=(PA =像素{ p + 3 })* RBS);

r_in_sum = PR;
g_in_sum = PG;
b_in_sum = Pb;
a_in_sum = PA;

栈= stack.next;
}


stackstart堆放=;
stackout = stackend;
对于(x = 0;x宽度;x + +)
{
{一} = 3像素+ PA =(a_sum * mul_sum)> > shg_sum;
如果(PA)!= 0)
{
PA = 255 PA;
像素{一} =((r_sum * mul_sum)> > shg_sum)* PA;
{一} = 1像素+((g_sum * mul_sum)> > shg_sum)* PA;
{一} = 2像素+((b_sum * mul_sum)> > shg_sum)* PA;
{人}
像素{ } } =像素{ + 1 } =像素{ + 2 } = 0;
}

r_sum = r_out_sum;
g_sum = g_out_sum;
b_sum = b_out_sum;
a_sum = a_out_sum;

r_out_sum = R堆放;
g_out_sum = G堆放;
b_out_sum = B堆放;
a_out_sum =一个堆放;

P =(YW +(((P = X +半径±1)< widthminus1 P:widthminus1))<< 2;

r_in_sum =(堆放。R =像素{ p });
g_in_sum =(堆放。G =像素{ p + 1 });
b_in_sum =(堆放。B = P + 2像素{ });
a_in_sum =(堆放。=像素{ p + 3 });

r_sum = r_in_sum;
g_sum = g_in_sum;
b_sum = b_in_sum;
a_sum = a_in_sum;

stackin.next堆放=;

r_out_sum =(PR = stackout。R);
g_out_sum =(PG = stackout。G);
b_out_sum =(PB = stackout。B);
a_out_sum =(PA = stackout的。);

r_in_sum = PR;
g_in_sum = PG;
b_in_sum = Pb;
a_in_sum = PA;

stackout = stackout.next;

易= 4;
}
YW =宽度;
}


对于(x = 0;x宽度;x + +)
{
g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0;

易x<2;
r_out_sum = radiusplus1 *(PR =像素{一});
g_out_sum = radiusplus1 *(PG =像素{一+ 1 });
b_out_sum = radiusplus1 *(PB =像素{一+ 2 });
a_out_sum = radiusplus1 *(PA =像素{一+ 3 });

r_sum = sumfactor *公关;
g_sum = sumfactor * PG;
b_sum = sumfactor *铅;
a_sum = sumfactor * PA;

栈= stackstart;

为(i = 0;i < radiusplus1;i++)
{
堆栈;
堆栈;
堆栈;
栈;
栈= stack.next;
}

YP =宽度;

对于(i = 1;i <半径;i +)
{
益=(YP + x)<< 2;

(r_sum =栈。R =(PR =像素{一}))*(RBS = radiusplus1 -我);
(g_sum =栈。G =(PG =像素{一+ 1 })* RBS);
(b_sum =栈。B =(PB =像素{一+ 2 })* RBS);
(a_sum =栈。=(PA =像素{一+ 3 })* RBS);

r_in_sum = PR;
g_in_sum = PG;
b_in_sum = Pb;
a_in_sum = PA;

栈= stack.next;

如果(我的<< heightminus1)
{
YP =宽度;
}
}

易= x;
stackstart堆放=;
stackout = stackend;
对于(y = 0;y <高度;y + +)
{
<<2;
像素{ p + 3 } = PA =(a_sum * mul_sum)> > shg_sum;
如果(0)
{
PA = 255 PA;
像素{ } =(P(r_sum * mul_sum)> > shg_sum)* PA;
像素{ p + 1 } =((g_sum * mul_sum)> > shg_sum)* PA;
像素{ p + 2 } =((b_sum * mul_sum)> > shg_sum)* PA;
{人}
像素{ } } =像素{ + 1 } =像素{ P + 2 } = 0;
}

r_sum = r_out_sum;
g_sum = g_out_sum;
b_sum = b_out_sum;
a_sum = a_out_sum;

r_out_sum = R堆放;
g_out_sum = G堆放;
b_out_sum = B堆放;
a_out_sum =一个堆放;

P =(X + Y + ((((((( P = radiusplus1)< heightminus1 P:heightminus1)*宽)<< 2;

r_sum =(r_in_sum + =(堆放。R =像素{ p }));
g_sum =(g_in_sum + =(堆放。G =像素{ p + 1 }));
b_sum =(b_in_sum + =(堆放。B = P + 2像素{ }));
a_sum =(a_in_sum + =(堆放。=像素{ p + 3 }));

stackin.next堆放=;

r_out_sum =(PR = stackout。R);
g_out_sum =(PG = stackout。G);
b_out_sum =(PB = stackout。B);
a_out_sum =(PA = stackout的。);

r_in_sum = PR;
g_in_sum = PG;
b_in_sum = Pb;
a_in_sum = PA;

stackout = stackout.next;

宽=;
}
}

context.putimagedata(影像数据,top_x,top_y);

}


功能stackblurcanvasrgb(ID,top_x,top_y、宽度、高度、半径)
{
如果(isnan(半径)| |半径<1回);
半径| = 0;

VaR的画布document.getelementbyid(ID);
VaR上下文= canvas.getcontext(2D);
VaR数据;

{试
{试
数据= context.getimagedata(top_x,top_y,宽度,高度);
} catch(e){


{试
netscape.security.privilegemanager.enableprivilege(universalbrowserread );
数据= context.getimagedata(top_x,top_y,宽度,高度);
} catch(e){
警报(无法访问本地图像);
抛出新错误()无法访问本地图像数据:;
返回;
}
}
} catch(e){
警报(无法访问图像);
抛出新错误()无法访问图像数据:;
}

VaR像素= imagedata.data;

变量x,y,I,P,YP,毅伟,r_sum,g_sum,b_sum,
r_out_sum,g_out_sum,b_out_sum,
r_in_sum,g_in_sum,b_in_sum,
PR,PG,PB,RBS;

半径=半径+ 1;
VaR W4 =宽度<<2;
无功widthminus1 =宽度1;
无功heightminus1 =高度1;
无功radiusplus1 =半径+ 1;
无功sumfactor = radiusplus1 *(radiusplus1 + 1)/ 2;

无功stackstart =新blurstack();
var = stackstart堆栈;
对于(i = 1;i <;;+(+))
{
栈= stack.next =新blurstack();
如果(我= = radiusplus1)var =栈stackend;
}
stack.next = stackstart;
var stackin = null;
无功stackout = null;

YW =一= 0;

无功mul_sum = mul_table {半径};
无功shg_sum = shg_table {半径};

对于(y = 0;y <高度;y + +)
{
r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0;

r_out_sum = radiusplus1 *(PR =像素{一});
g_out_sum = radiusplus1 *(PG =像素{一+ 1 });
b_out_sum = radiusplus1 *(PB =像素{一+ 2 });

r_sum = sumfactor *公关;
g_sum = sumfactor * PG;
b_sum = sumfactor *铅;

栈= stackstart;

为(i = 0;i < radiusplus1;i++)
{
堆栈;
堆栈;
堆栈;
栈= stack.next;
}

为(i = 1;i < radiusplus1;i++)
{
P =一+((widthminus1 <我widthminus1:我)<< 2);
(r_sum =栈。R =(PR =像素{ p }))*(RBS = radiusplus1 -我);
(g_sum =栈。G =(PG =像素{ p + 1 })* RBS);
(b_sum =栈。B =(PB =像素{ p + 2 })* RBS);

r_in_sum = PR;
g_in_sum = PG;
b_in_sum = Pb;

栈= stack.next;
}


stackstart堆放=;
stackout = stackend;
对于(x = 0;x宽度;x + +)
{
像素{一} =(r_sum * mul_sum)> > shg_sum;
{一} = 1像素+(g_sum * mul_sum)> > shg_sum;
{一} = 2像素+(b_sum * mul_sum)> > shg_sum;

r_sum = r_out_sum;
g_sum = g_out_sum;
b_sum = b_out_sum;

r_out_sum = R堆放;
g_out_sum = G堆放;
b_out_sum = B堆放;

P =(YW +(((P = X +半径±1)< widthminus1 P:widthminus1))<< 2;

r_in_sum =(堆放。R =像素{ p });
g_in_sum =(堆放。G =像素{ p + 1 });
b_in_sum =(堆放。B = P + 2像素{ });

r_sum = r_in_sum;
g_sum = g_in_sum;
b_sum = b_in_sum;

stackin.next堆放=;

r_out_sum =(PR = stackout。R);
g_out_sum =(PG = stackout。G);
b_out_sum =(PB = stackout。B);

r_in_sum = PR;
g_in_sum = PG;
b_in_sum = Pb;

stackout = stackout.next;

易= 4;
}
YW =宽度;
}


对于(x = 0;x宽度;x + +)
{
g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0;

易x<2;
r_out_sum = radiusplus1 *(PR =像素{一});
g_out_sum = radiusplus1 *(PG =像素{一+ 1 });
b_out_sum = radiusplus1 *(PB =像素{一+ 2 });

r_sum = sumfactor *公关;
g_sum = sumfactor * PG;
b_sum = sumfactor *铅;

栈= stackstart;

为(i = 0;i < radiusplus1;i++)
{
堆栈;
堆栈;
堆栈;
栈= stack.next;
}

YP =宽度;

对于(i = 1;i <半径;i +)
{
益=(YP + x)<< 2;

(r_sum =栈。R =(PR =像素{一}))*(RBS = radiusplus1 -我);
(g_sum =栈。G =(PG =像素{一+ 1 })* RBS);
(b_sum =栈。B =(PB =像素{一+ 2 })* RBS);

r_in_sum = PR;
g_in_sum = PG;
b_in_sum = Pb;

栈= stack.next;

如果(我的<< heightminus1)
{
YP =宽度;
}
}

易= x;
stackstart堆放=;
stackout = stackend;
对于(y = 0;y <高度;y + +)
{
<<2;
像素{ } = P(r_sum * mul_sum)> > shg_sum;
像素{ p + 1 } =(g_sum * mul_sum)> > shg_sum;
像素{ p + 2 } =(b_sum * mul_sum)> > shg_sum;

r_sum = r_out_sum;
g_sum = g_out_sum;
b_sum = b_out_sum;

r_out_sum = R堆放;
g_out_sum = G堆放;
b_out_sum = B堆放;

P =(X + Y + ((((((( P = radiusplus1)< heightminus1 P:heightminus1)*宽)<< 2;

r_sum =(r_in_sum + =(堆放。R =像素{ p }));
g_sum =(g_in_sum + =(堆放。G =像素{ p + 1 }));
b_sum =(b_in_sum + =(堆放。B = P + 2像素{ }));

stackin.next堆放=;

r_out_sum =(PR = stackout。R);
g_out_sum =(PG = stackout。G);
b_out_sum =(PB = stackout。B);

r_in_sum = PR;
g_in_sum = PG;
b_in_sum = Pb;

stackout = stackout.next;

宽=;
}
}

context.putimagedata(影像数据,top_x,top_y);

}

BlurStack()函数
{
这个= r=0;
这个G = 0;
b = 0;
这个= 0;
this.next = null;
}


使用方法uff1a

复制代码代码如下:stackblurimage(sourceimageid,targetcanvasid,半径,bluralphachannel);
StackBlurCanvasRGBA(targetcanvasid,top_x,top_y,宽度、高度、半径);
StackBlurCanvasRGB(targetcanvasid,top_x,top_y,宽度、高度、半径);