http://www.telecable.es/personales/terepardo1/SWFs/bordes_pinocho.swf
Añado los scripts de las funciones de compilar y decompilar la salida del código para convertirlo en cadena exportable y/o array como explicaba más arriba.
De ese modo la imagen se convierte en una cadena de figuras cerradas que se pueden perfilar, dibujar y rellenar; así como convertir en MC´s independientes para multitud de efectos.
DECOMPILAR: Convierte la cadena comprimida en un array triple de colores, formas, puntos.
Código :
function decompilar(cdn){ cdh=["a","b","c","d","e","f","g","h","000","111","222","333","444","555","666","777"]; p=new Array (1,1,1,0,-1,-1,-1,0,-1,0,1,1,1,0,-1,-1) st = cdn.split("C"); for (var n=0 ;n < st.length ; n++){ st[n] = st[n].split("M"); for (var m=1 ;m < st[n].length ; m++){ st[n][m]=st[n][m].split("P") st[n][m][0]= st[n][m][0].split(",") xx=Number(st[n][m][0][1]); yy=Number(st[n][m][0][2]); st[n][m][0]=new Point(xx,yy) Cda=st[n][m][1] ; Cms="" Cig=Cda.indexOf("<"); while(Cig != -1){ Cii=Cda.indexOf("|"); Cif=Cda.indexOf(">"); CN=Number(Cda.substring(Cii+1,Cif)); NM=Cda.substring(Cig+1,Cii); for (var q=0 ;q < CN ; q++){Cms +=NM;} Cda = Cda.substr(0,Cig)+Cms+Cda.slice(Cif+1); Cms=""; Cig=Cda.indexOf("<"); } for ( var k=0 ; k<8 ; k++){ Cig=Cda.indexOf(cdh[k]); while(Cig != -1){ Cda = Cda.substr(0,Cig)+cdh[k+8]+Cda.slice(Cig+1); Cig=Cda.indexOf(cdh[k]); } } for ( var h=0 ; h < Cda.length ; h++){ adX= p[Number(Cda.substr(h,1))]; adY= p[Number(Cda.substr(h,1))+8]; st[n][m][h+1]= new Point(st[n][m][h].x+ adX ,st[n][m][h].y+ adY) } } } return st; }
COMPILAR: Convierte el array de colores, formas, puntos en una cadena y la comprime.
Código :
function compilar(ay){ sal=""; for (var n=1 ;n < ay.length ; n++){ sal += "C"+ ay[n][0] for (var m=1 ;m < ay[n].length ; m++){ sal += "M,"+ ay[n][m][0].x+","+ ay[n][m][0].y+"P"+ compresor(ay[n][m][1]); } } return sal; } function compresor(cadena){ for(var m = 1 ; m <= 5 ; m++){ cadena2=""; lc = cadena.length; ctcd=0; for(var j = 0 ; j < lc ; j+=m){ cdsub = cadena.substr(j,m); cadena2+=cdsub; ctcd++; if (cdsub != cadena.substr(j+m,m) && ctcd > 6-m){ cadena2 = cadena2.substr(0,cadena2.length-ctcd*m)+ "<"+cdsub+"|"+ctcd+">"; ctcd=0; } if (cdsub != cadena.substr(j+m,m) && ctcd <= 6-m){ ctcd=0; } } cadena=cadena2; } lc = cadena.length; for(var j = 0 ; j < lc-2 ; j++){ if( Number(cadena.substr(j,3))%111 ==0){ cadena=cadena.substr(0,j)+String.fromCharCode(Number(cadena.substr(j,1))+97)+cadena.substr(j+3); j-=2; lc = cadena.length; } } return cadena }
Terminadas las vacaciones, continuo con los tutoriales que he empezado.