【原创js】把马赛克到svg,提取成用来做拼图或者十字绣之类到数字

先把图片在ai创建马赛克,存成svg以后,用chrome打开svg,然后在console粘贴下面这段:

var R=document.getElementsByTagName("rect");

//获取矩形

var C={name:[],x:[],y:[]};


var brNum=0;


for(var i=0;i<R.length;i++){

//开始循环,从第一个到最后一个方格


    C.name[i]=R[i].className.animVal;

    //获取第几个颜色的几

    C.x[i]=R[i].x.animVal.value;

    //获取x坐标,然而并没用

    C.y[i]=R[i].y.animVal.value;

    //获取y坐标,用来判断一行多少个

    brNum=C.y[i]==C.y[0]?brNum+1:brNum;

    //如果现在这个方格和第一个方格到y一样,那这行到数量就加一,加到不一样为止

}


C.outputNum=function(n){

    return C.name[n].replace("st","")

    //等下输出到时候,自动把class到st替换掉

}


result="";


for(var j=C.name.length-1;j>=0;j--){

br=j!==C.name.length-1&&(j+1)%brNum==0?"<br>":"";

//先判断,如果不是第一行,而且是每一行到第一个,就先回车,不然不回车;

result+=br+C.outputNum(j)+"\t";

//上面判断好回车,这里就每个数字之间加上制表符,方便拿去ai用

}


document.write(result);

//输出,完事。

最后把出现的那堆数字,复制到ai粘贴,行距改成36,然后把原来到马赛克放大或者缩小,让每个矩形的大小变成36,最后对齐一下,保存。


为什么是36呢?因为制表符的单元格宽度默认是36🤷‍♂️

评论

© leizingjiu | Powered by LOFTER