无价脂宝
表示出来的结果是一样吗,你换一下都对比一下就知道了
何时才能成大佬
for (var i=0;i<5;i++){
for (var j=0;j<3;j++){
var p = i*3+j;
document.write(p+' ');
}
}
document.write("<br />");
for (var i=0;i<5;i++){
for (var j=0;j<3;j++){
var p = j*3+i;
document.write(p+' ');
}
}
何时才能成大佬
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
.btn{
text-decoration: none;
border: 1px solid black;
border-radius: 5px;
background: white;
color: black;
padding: 10px;
box-shadow: 5px 5px 5px #b7b7b7;
}
</style>
</head>
<body>
<div style="margin:20px auto;width:1168px;">
<canvas id="canvasa" width="582" height="388" style="display:block;float:left;border:1px solid #aaa;"></canvas>
<canvas id="canvasb" width="582" height="388" style="display:block;float:right;border:1px solid #aaa;"></canvas>
<div style="clear:both;"></div>
<div style="text-align:center;margin-top:50px;font-size:20px;">
<a href="javascript:blurEffect()" class="btn">Blur Effect</a>
</div>
</div>
<script>
var cnvA=document.getElementById("canvasa");
var cxtA=cnvA.getContext("2d");
var cnvB=document.getElementById("canvasb");
var cxtB=cnvB.getContext("2d");
var image=new Image();
window.onload=function(){
image.src="images/02.jpg";
image.onload=function(){
cxtA.drawImage(image,0,0,cnvA.width,cnvA.height);
}
};
function blurEffect(){
var imageData=cxtA.getImageData(0,0,cnvA.width,cnvA.height);
var data=imageData.data;
var tempImageData=cxtA.getImageData(0,0,cnvA.width,cnvA.height);
var tempData=tempImageData.data;
var blurR=3;
var number=(blurR+1+blurR)*(blurR+1+blurR);
for(var i=blurR;i<.height-blurR;i++){
for(var j=blurR;j<cnvB.width-blurR;j++){
var sumR=0,sumG= 0,sumB=0;
for(var dx=-blurR;dx<=blurR;dx++){
for(var dy=-blurR;dy<=blurR;dy++){
var x=i+dx;
var y=j+dy;
var index=x*cnvB.width+y;
sumR+=tempData[index*4+0];
sumG+=tempData[index*4+1];
sumB+=tempData[index*4+2];
}
}
var index=i*cnvB.width+j;
data[index*4+0]=sumR/number;
data[index*4+1]=sumG/number;
data[index*4+2]=sumB/number;
}
}
cxtB.putImageData(imageData,0,0,0,0,cnvB.width,cnvB.height);
}
</script>
</body>
</html>


慕用0489808
是因为没有服务器环境吧,不要用本地图片再试一下
猫猫猫尾草
这哪是什么小问题呀,这
幕布斯6573378
onmousedown()和onmouseup()获取鼠标按下和松开的坐标,再计算一下相对于canvas画布位置的坐标应该就可以算出来了
x米多米拉
改成下面这样了,不知道还有没有问题,欢迎交流~
var blurR = 50;
for(var i = 0; i < canvasA.height; i++){
for(var j = 0; j < canvasA.width; j++ ){
var r = 0,g = 0,b = 0,totalNum = 0;
for(var m = -blurR; m <= blurR; m++){
for(var n = -blurR; n <= blurR;n++){
var x = i + m;
var y = j + n;
if(x<0||y<0||x >= canvasA.height ||y >= canvasA.width)
continue;
totalNum++;
var p = x*canvasA.width+y;
r += tmpData[4*p+0];
g += tmpData[4*p+1];
b += tmpData[4*p+2];
}
}
var p = i*canvasA.width+j;
tmpData[4*p+0] = r/totalNum;
tmpData[4*p+1] = g/totalNum;
tmpData[4*p+2] = b/totalNum;
}
}
qq_A風love銘_0
我是先将 canvas的大小与 图片大小调成一致 然后在渲染过后的canva用 css的手段 将其限制大小 这样就不会失帧了
TalorCC
so what
qq_快乐小2B_0
var a = pixelData[i*4+2]
var grey = r*0.3 + g*0.59 + b*0.11
声明a却用b计算
Willie_Jiang
chrome底层决定的吧,用chrome的话需要打开存在服务器的网页才能使用getImageData()方法。用firefox、edge等就不用
慕粉4042427
//从dx,dy开始,使w,h区域马赛克
for(var i=dy;i<(dy+h);i+=size)
for(var j=dx;j<(dx+w);j+=size){
}
白肚子狗熊半本书
dl_嘛哩嘛哩哄
js中没有严格意义上的二维数组,其实都是一维的。
comlejade
在canvas中,像素点是以一维数组的形式呈现的,所以当你获取了二维坐标以后,需要转成一维数组。
cesiya23
当你将j的初始值设置为size的时候,即你不马赛克化x方向下前size值的图片,但是你会发现图片处理后的情况如下
可以得出结论,如果j+size的值大于图片的width时,即(j+dy)的值在大于图片的width,他就会从头开始获取像素值,所以才会出现三段图像,而不是我们预料的两段图像
cesiya23
其实你的说法是严谨的做法,但是因为canvasa和canvasb两个canvas其实是相同大小的,所以两种条件都成立
平凡璐
我仍旧在这里
图像边缘的1个像素是保持不变的,相对于整个图像来说可以忽略
中古
试过了,不行的,他的最高和最底相差很大的,用Ps去做,也做不了一个满意的效果。