Inspiration: http://www.toxel.com/inspiration/2012/04/02/typewriter-art/

 

PImage img;

PFont f;
String message = “So hatte der kleine Prinz trotz des guten Willens seiner Liebe rasch an ihr zu zweifeln begonnen, ihre belanglosen Worte bitter ernst genommen und war sehr unglücklich geworden.”;
float [][] Grid = {  { 0, 0  }  , { 0, 1  }  , { 1, 0  }  , { 1, 1  }  , { 0, 2  }  , { 2, 0  }  , { 1, 2  }  , { 2, 1  }  , {  2, 2  }  , { .5, .5  }  , { 1.5, 1.5  }  , { .5, 1.5  }  , { 1.5, .5  } };

void setup() {
  size(550,550);
  smooth();
  img = loadImage(“portrait2.jpg”);
  f = createFont(“Courier”, 20, true);
}

void draw() {
  background(255);

  for (int gridX = 0; gridX < img.width; gridX++) {  //alle pixel durchgehen
    for (int gridY = 0; gridY < img.height; gridY++) {

      // grid position + tile size
      float tileWidth = width / (float)img.width;
      float tileHeight = height / (float)img.height;
      float posX = tileWidth*gridX – tileWidth/2;
      float posY = tileHeight*gridY + tileHeight/2;

      // get current color
      color c = img.pixels[gridY*img.width+gridX];

      // greyscale conversion
      int greyscale = round(red(c)*0.3+green(c)*0.59+blue(c)*0.11);

      int num = (int)map(greyscale, 0, 255, 8, 0);
      if (num>0) {

        for (int i=0; i<num; i++) {

          float posXX = posX + tileWidth/3*Grid[i][0]; //Positionen per Grid bestimmen
          float posYY = posY + tileHeight/3*Grid[i][1];

          int k = (int)random(0, message.length());
          /*float posXX = posX + random(0, tileWidth); //Positionen per Zufall bestimmen
           float posYY = posY + random(0, tileHeight);*/
          int ran = (int)random(1.5, 3); //random for Fontsize
          textFont(f, 3*ran); //Font and Fontsize
          fill(0);

          text(message.charAt(k), posXX, posYY);
        }
      }
    }
  }
  noLoop();
}