\".$str[$contador%$largo].\"\"; } echo \"
\"; } imagedestroy($im); imagedestroy($tmp_img); ?> DESAFIO \',file(\'che.txt\')); ?> i!lI;:,\"^`\\\'. \'; $indice=strlen($paleta); $esc=imagecreate($indice,10); $dif=255/$indice; $ini=0; for($i=0;$i<$indice;$i++){ $ini=$ini+$dif; $col[$paleta[$i]]= imagecolorallocate($esc,intval($ini),intval($ini),intval($ini)); $col2[intval($ini)]=$paleta[$i]; imageline($esc,$i,0,$i,10,$col[$paleta[$i]]); } $str=\'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\'; $imagen = imagecreatefromstring(base64_decode($str)); imagetruecolortopalette($imagen,true,$indice); imagepalettecopy($imagen,$esc); $imagen2=imagecreate(imagesx($imagen)*6/imagefontwidth(1),imagesy($imagen)*6/imagefontheight(1)); imagecopyresampled($imagen2, $imagen, 0, 0, 0, 0,imagesx($imagen)*6/imagefontwidth(1), imagesy($imagen)*6/imagefontheight(1),imagesx($imagen),imagesy($imagen)); imagedestroy($esc); $txt=\'\'; for($a=0;$ai!lI;:,\"^`\\\'. \'; $propw=imagefontwidth(1)*(strlen($lineas[0]))/6; $proph=imagefontheight(1)*$tot/6; $indice=strlen($paleta); $im=imagecreatetruecolor((strlen($lineas[0])),$tot); $dif=255/$indice; $ini=0; for($i=0;$i<$indice;$i++){ $ini=$ini+$dif; $col[$paleta[$i]]= imagecolorallocate($im,intval($ini),intval($ini),intval($ini)); } for($a=0;$a<$tot;$a++){ for($b=0;$b<$largo;$b++){ imagesetpixel ($im, $b, $a, $col[substr($lineas[$a],$b,1)]); } } $width = imagesx($im); $height = imagesy($im); $tmp_img = imagecreatetruecolor($propw, $proph); imagecopyresampled($tmp_img, $im, 0, 0, 0, 0,$propw, $proph, $width, $height); imagejpeg($tmp_img,\'che2.jpg\',100); imagedestroy($im); imagedestroy($tmp_img); } ?> DESAFIO
LIBRERIA GD
activasecundario\" onClick=\"ir(\'desafio.php?activa=paleta\')\">CON PALETA
activasecundario\" onClick=\"ir(\'desafio.php?activa=gradientes\')\">CON GRADIENTES
EXPERIMENTOS
activasecundario\" onClick=\"ir(\'desafio.php?activa=ascii\')\">ASCII
activasecundario\" onClick=\"ir(\'desafio.php?activa=fuentes2\')\">FUENTES

Imágenes generadas con gd y una escala de luces y sombras basada en la densidad visual de caracteres ascii.


<?php
//código utilizado para crear las imágenes 
$archivo=\'marciano.txt\'
$lineas=file($archivo); 
$tot=count($lineas); 
$largo=strlen($lineas[0]); 
$propw=imagefontwidth(1)*(strlen($lineas[0]))/6
$proph=imagefontheight(1)*$tot/6
$im=imagecreate((strlen($lineas[0])),$tot); 
$fondo=imagecolorallocate($im,150,150,150);
//Para obtener imagen en escala de grises: 
$col[\'$\']= imagecolorallocate($im,190,190,190);
$col[\'%\']= imagecolorallocate($im,220,220,220);
$col[\'#\']= imagecolorallocate($im,100,100,100);
$col[\'M\']= imagecolorallocate($im,50,50,50);
$col[\'N\']= imagecolorallocate($im,80,80,80);
$col[\'H\']= imagecolorallocate($im,95,95,95);
$col[\'A\']= imagecolorallocate($im,120,120,120);
$col[\'Q\']= imagecolorallocate($im,120,120,120);
$col[\'Y\']= imagecolorallocate($im,150,150,155);
$col[\'2\']= imagecolorallocate($im,160,160,160);
$col[\'0\']= imagecolorallocate($im,120,120,120);
$col[\'D\']= imagecolorallocate($im,130,130,130);
$col[\'U\']= imagecolorallocate($im,130,130,130);
$col[\'+\']= imagecolorallocate($im,245,245,245);
$col[\'.\']= imagecolorallocate($im,245,245,245);
$col[\' \']= imagecolorallocate($im,245,245,245);
$col[\"\\r\"]= imagecolorallocate($im,255,255,255);
$col[\"\\n\"]= imagecolorallocate($im,255,255,255);
/*Para obtener imagen en escala Rojo a Blanco fijamos a 255 el canal Red */
             
/*Para obtener imagen en escala Verde a Blanco fijamos a 255 el canal Green */
             
/*Para obtener imagen en escala Azul a Blanco fijamos a 255 el canal Blue */
    
for($a=0;$a<$tot-1;$a++){ 
        for(
$b=0;$b<$largo;$b++){ 
            
imagesetpixel ($im,$b,$a,$col[$lineas[$a][$b]]); 
        } 
    } 
$width imagesx($im); 
$height imagesy($im); 
$tmp_img imagecreatetruecolor($propw$proph); 
imagecopyresampled($tmp_img$im0000,$propw$proph$width$height); 
imagejpeg($tmp_img,\'imagen1.jpg\',100); 
imagedestroy($im); 
imagedestroy($tmp_img); 
?> 

La misma imagen forzada a adoptar la escala de colores de otra imagen.


<?php
//código utilizado para crear las imágenes
$archivo=\'marciano.txt\'
$lineas=file($archivo); 
$tot=count($lineas); 
$largo=strlen($lineas[0]); 
$propw=imagefontwidth(1)*(strlen($lineas[0]))/6
$proph=imagefontheight(1)*$tot/6
$im=imagecreate((strlen($lineas[0])),$tot); 
$fondo=imagecolorallocate($im,150,150,150);
//Para obtener imagen en escala de grises: 
$col[\'$\']= imagecolorallocate($im,190,190,190);
$col[\'%\']= imagecolorallocate($im,220,220,220);
$col[\'#\']= imagecolorallocate($im,100,100,100);
$col[\'M\']= imagecolorallocate($im,50,50,50);
$col[\'N\']= imagecolorallocate($im,80,80,80);
$col[\'H\']= imagecolorallocate($im,95,95,95);
$col[\'A\']= imagecolorallocate($im,120,120,120);
$col[\'Q\']= imagecolorallocate($im,120,120,120);
$col[\'Y\']= imagecolorallocate($im,150,150,155);
$col[\'2\']= imagecolorallocate($im,160,160,160);
$col[\'0\']= imagecolorallocate($im,120,120,120);
$col[\'D\']= imagecolorallocate($im,130,130,130);
$col[\'U\']= imagecolorallocate($im,130,130,130);
$col[\'+\']= imagecolorallocate($im,245,245,245);
$col[\'.\']= imagecolorallocate($im,245,245,245);
$col[\' \']= imagecolorallocate($im,245,245,245);
$col[\"\\r\"]= imagecolorallocate($im,255,255,255);
$col[\"\\n\"]= imagecolorallocate($im,255,255,255);
    for(
$a=0;$a<$tot-1;$a++){ 
        for(
$b=0;$b<$largo;$b++){ 
            
imagesetpixel ($im,$b,$a,$col[$lineas[$a][$b]]); 
        } 
    } 
$width imagesx($im); 
$height imagesy($im); 
$tmp_img imagecreatetruecolor($propw$proph); 
imagecopyresampled($tmp_img$im0000,$propw$proph$width$height); 
imagetruecolortopalette($tmp_img,true,256);
/* 
para no usar imágenes externas, codificamos en base 64 la imagen que vamos a usar 
como paleta de colores y volcamos el resultado a la variable $str, para luego decodificarla 
y recrearla con la función imagecreatefromstring 
*/ 
$str=\'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\';
    
$escala imagecreatefromstring(base64_decode($str));
    
imagepalettecopy($tmp_img,$escala);
    
imagejpeg($tmp_img,\'imagen6.jpg\',100);
/* 
como igualmente queremos mostrar nuestra escala en pantalla, la grabamos como archivo: 
*/ 
    
imagegif($escala,\'escala1.gif\');
    
imagedestroy($im);
    
imagedestroy($tmp_img);
    
imagedestroy($escala);
?> 

Luego de realizar el ejercicio quise ver si podía realizar el proceso inverso, es decir, tomar una imagen y transformarla en "ASCII ART".
Este es el resultado. La primera es la imagen convertida en secuencia caracteres, la segunda es la transformación de esa secuencia a imagen nuevamente y la última es la imagen original.



<?php
/*código utilizado para crear la secuencia de caracteres ascii y mostrarla 
en formato HTML*/
?>
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />
<title>DESAFIO</title>
<style type=\"text/css\">
<!--
body {
    font-family: \"Courier New\", Courier, mono;
    font-size: 9px;
    line-height: 9px;
    letter-spacing: 1px;
    }
-->
<!--es importante que la fuente sea monospace, es decir que el ancho de todas las letras sea el mismo -->
</style>
</head>
<body>
<?php
/*
uso una paleta diferente de las anteriores (no tiene salto de línea al final),
y con la misma genero un gradiente que utilizaré para poner la foto en blanco
y negro
*/
$paleta=\'$@B%8&WM#NH*oahkbdpqwmZ2AO0DQLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\"^`\\\'. \';
$indice=strlen($paleta);
$esc=imagecreate($indice,10);
$dif=255/$indice;
$ini=0;
for(
$i=0;$i<$indice;$i++){
$ini=$ini+$dif;
$col[$paleta[$i]]= imagecolorallocate($esc,intval($ini),intval($ini),intval($ini));
$col2[intval($ini)]=$paleta[$i];
imageline($esc,$i,0,$i,10,$col[$paleta[$i]]);
}
/*
como no quería usar archivos externos creo la imagen a partir de un string;
en circunstancias normales usaría, en vez de imagecreatefromstring, lo siguiente:
imagecreatefromgif o imagecreatefrompng o imagecreatefromjpeg
*/
$str=\'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\';
$imagen imagecreatefromstring(base64_decode($str));
/*
como la imagen es truecolor la convierto en indexada, con la cantidad
de colores que uso en mi paleta
*/
imagetruecolortopalette($imagen,true,$indice);
/*
y con la línea que sigue fuerzo la imagen a usar mi escala de colores,
es decir, la pongo en blanco y negro:
*/
imagepalettecopy($imagen,$esc);
$imagen2=imagecreate(imagesx($imagen)*6/imagefontwidth(1),imagesy($imagen)*6/imagefontheight(1));
imagecopyresampled($imagen2$imagen0000,imagesx($imagen)*6/imagefontwidth(1), imagesy($imagen)*6/imagefontheight(1), imagesx($imagen),imagesy($imagen));
imagedestroy($esc);
/*
finalmente, luego de reescalar la imagen, tomo cada pixel y reemplazo su color por
el caracter que le corresponde dentro de mi escala de colores:
*/
for($a=0;$a<imagesy($imagen2);$a++){
    for(
$b=0;$b<imagesx($imagen2);$b++){
        
$color_index imagecolorat($imagen2$b$a);
        
$color_tran imagecolorsforindex($imagen2$color_index);
        echo 
$col2[$color_tran[\'red\']];
    }
    echo 
\"<br />\";
}
imagejpeg($imagen,\'che.jpg\',\'100\');
imagedestroy($imagen);
imagedestroy($imagen2);
?>
</body>
</html>


<?php
/*código utilizado para recrear la imagen desde la secuencia de caracteres 
ascii generada anteriormente

La primera parte del código es igual al anterior, sólo que en vez de generar 
html genero un txt
*/
$paleta=\'$@B%8&WM#NH*oahkbdpqwmZ2AO0DQLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\"^`\\\'. \';
    
$indice=strlen($paleta);
    
$esc=imagecreate($indice,10);
    
$dif=255/$indice;
    
$ini=0;
        for(
$i=0;$i<$indice;$i++){
            
$ini=$ini+$dif;
            
$col[$paleta[$i]]= imagecolorallocate($esc,intval($ini),intval($ini),intval($ini));
            
$col2[intval($ini)]=$paleta[$i];
            
imageline($esc,$i,0,$i,10,$col[$paleta[$i]]);
        }
    
$str=\'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\';
    
$imagen imagecreatefromstring(base64_decode($str));
    
imagetruecolortopalette($imagen,true,$indice);
    
imagepalettecopy($imagen,$esc);
    
$imagen2=imagecreate(imagesx($imagen)*6/imagefontwidth(1),imagesy($imagen)*6/imagefontheight(1));
    
imagecopyresampled($imagen2$imagen0000,imagesx($imagen)*6/imagefontwidth(1), imagesy($imagen)*6/imagefontheight(1),imagesx($imagen),imagesy($imagen));
    
imagedestroy($esc);
    
$txt=\'\';
        for(
$a=0;$a<imagesy($imagen2);$a++){
            for(
$b=0;$b<imagesx($imagen2);$b++){
                
$color_index imagecolorat($imagen2$b$a);
                
$color_tran imagecolorsforindex($imagen2$color_index);
                
$txt.= $col2[$color_tran[\'red\']];
            }
$txt.=\"
\"
;
        }
    
$archivo=\'che.txt\';
    
$fp=fopen($archivo,\'w+\');
    
fwrite($fp,$txt);
    
fclose($fp);
    
imagedestroy($imagen);
    
imagedestroy($imagen2);
/*
a partir de aquí comenzamos a convertir la secuencia de caracteres en imagen.
*/    
    
$lineas=file($archivo);
    
$tot=count($lineas);
    
$largo=strlen($lineas[0]);
/*
volvemos a la paleta con salto de línea al final:
*/    
    
$paleta=\'$@B%8&WM#NH*oahkbdpqwmZ2AO0DQLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\"^`\\\'. 
    \'
;
    
$propw=imagefontwidth(1)*(strlen($lineas[0]))/6;
    
$proph=imagefontheight(1)*$tot/6;
    
$indice=strlen($paleta);
    
$im=imagecreatetruecolor((strlen($lineas[0])),$tot);
    
$dif=255/$indice;
    
$ini=0;
        for(
$i=0;$i<$indice;$i++){
            
$ini=$ini+$dif;
            
$col[$paleta[$i]]= imagecolorallocate($im,intval($ini),intval($ini),intval($ini));
        }
        for(
$a=0;$a<$tot;$a++){
            for(
$b=0;$b<$largo;$b++){
                
imagesetpixel ($im$b$a$col[substr($lineas[$a],$b,1)]);
            }
        }
    
$width imagesx($im);
    
$height imagesy($im);
    
$tmp_img imagecreatetruecolor($propw$proph);
    
imagecopyresampled($tmp_img$im0000,$propw$proph$width$height);
    
imagejpeg($tmp_img,\'che2.jpg\',100);  
    
imagedestroy($im);
    
imagedestroy($tmp_img);
?>

No quería despedirme sin rememorar el día en que Zubyc publicó mi fotografía en la sección quiénes somos de la web... Y bueno, por si alguien no la vio, aquí se la muestro nuevamente.
(La idea de este último experimento la tomé de http://www.washeebo.com/sargento/. Allí el autor llama a esta técnica textografía.)



<?php 
//Código utilizado para crear la pseudoimagen
?>
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />
<title>desafio marciano</title>
<style type=\"text/css\">
<!--
body {
background-color:#000000;
    font-family: \"Courier New\", Courier, mono;
    font-size: 10px;
    line-height: 7px;
    letter-spacing: 1px;
    color: #FFFFFF;
    }
-->
<!--es importante que la fuente sea monospace-->
</style>
</head>
<body>
<?php
$panino
=\'/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAARgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQABAMDAwMDBAMDBAYEAwQGBwUEBAUHCAYGBwYGCAoICQkJCQgKCgwMDAwMCgwMDQ0MDBERERERFBQUFBQUFBQUFAEEBQUIBwgPCgoPFA4ODhQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgARgBGAwERAAIRAQMRAf/EAHQAAAIDAAMBAAAAAAAAAAAAAAYHBAUIAAIDAQEBAAAAAAAAAAAAAAAAAAAAABAAAgEDAwIDBwIEBwEAAAAAAQIDEQQFABIGIQcxIhNBUWFxMhQIgUJSIyQVkaGxwTNDJhcRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AHbBF5A8hO1oIlAHTxTQXNgskZW4LigQqR8vjoPl/k4bdmyF0USyx8ct1LK3TasKFySfdQaDFeH77crxGfyOYNtb5q0yrtcS4+RftkSUncskckYLjp0INQdBPyn5e90LBbhOM43EYOa6orXnoy3sw6ez12CA/HZoK3h/5id58DlluOT5GHlmEmJS+x15bwwSmJqhjDPCisjD9taj36DXnbu+tsv2jx2atWEljeNLcWfqnwR5CQDTpUVofjoLXEf1MyxmiSLGzMnsNOnQ6CDLC5ykHgJQD5feChGg8knYQQqgonpx1Na18o0Fz6oNoCVKKU8zn29fAAaBYfkNyFsJ2zvbe1kCXufeLGQr7RCxDzE/AqoX9dBjm4t2W1SMTiFkAHkHUVHXQCt/GBG3831AGqjGu7/A6CqPj00G7vxPzkmZ7CXWCdxJLx7OXVoFc/Tb3aJcxAH5l9A5eLQwRyymf61VhGp6sK1J0EWS5QZaFgPKWKsCOtdp8NAE815FecT4PecmxtnFeX+Pgt5Ta3BdYjGzIjs3p+byg16aAHxP5XcBlENlzDG5DjV4EqZ4kGSsHHgWjkj2ybfmtRoKHvDzPi3cK8wMPE8pb5qxhtXl+4hLhBLLJ1R43CkMoUV3CvXQKC/tbVIazqFnuGdRFFQsNvjWnUddAEXECujER7WBIqQaMAadK6Cgnt2N36ESFpXICRL1ck+4aB2doe72S7L8T5JhZuPDI3ecvrW+t/uLn7aKEW8LRNuCBmcncKAGmgtbb8xO4NnkFvIuO4J