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.
