texte et dessin : Rorscha et Balzac se rencontrent

Précédent | 15/27 | Suivant

Un petit script en qui dessine du texte sur une image de Rorscha. Une version minimale à améliorer.

Une fois le script chargé, il suffit de passer sur la surface de l’animation avec la souris pour faire apparaitre les mots.

// Rorscha et Balzac reunifie
// http://fr.wikisource.org/wiki/Le_P%C3%A8re_Goriot/I
// variables et array necessaires
PImage a;
String lines[];
String mot[];
int countword=0;
PFont mapolice;

void setup() {
 size(736,482);
 background(255);
 smooth();

 // charger la police et parametrer
 mapolice = createFont("Titillium_title03.ttf", 10);
 textAlign(CENTER);

 // charger l'image en mémoire sans l'afficher
 a = loadImage("ror.png");
 a.loadPixels();

// charger le texte depuis le fichier externe
 lines= loadStrings("texte.txt");
 mot = split(lines[0]," ");
}

void draw() {
 color pix = a.pixels[mouseY*width+mouseX];
 if(pix != -1 && mouseX !=pmouseX && mouseY != pmouseY){
   fill(pix);
   text(mot[countword], mouseX, mouseY);
   countword++;
   if(countword >=mot.length){
     countword=0;
   }
 }
}

PS : Au moment ou je poste ce script, la gestion des polices et la génération de PDF est assez instable et compliquée en Processing 1.1. D’ici quelque temps le problème devrait être réglé, d’ici là la police par défaut (une sans-serif quelconque) est affichée dans le script avec Processing 1.1.

Variante plus complète

Ici, un système qui ne fait pas appel à la souris mais aux touches pour créer différentes propositions.

// Rorscha et Balzac reunifie
// http://fr.wikisource.org/wiki/Le_P%C3%A8re_Goriot/I
// variables et array necessaires
PImage a;
int precision=10; // plus ou moins de mots dans le dessin

String lines[];
String mot[];
int countword=0;
PFont mapolice;

void setup() {
 // charger l'image, elle decidera de la taille de l'animation
 a = loadImage("ror.png");
 size(a.width,a.height);

 smooth();

 // charger la police et parametrer
 mapolice = createFont("Titillium_title03.ttf", 10);
 textAlign(CENTER);

 // charger l'image en mémoire sans l'afficher
 a.loadPixels();

 // charger le texte depuis le fichier externe
 lines= loadStrings("texte.txt");
 mot = split(lines[0]," ");
}

void draw() {
 // rien ici, on attend une action de l'utilisateur
}

void keyPressed() {
 if (key == CODED) {
   if (keyCode == RIGHT || keyCode == LEFT) {
     nouvelle_image();
   }  
 } else {
   saveFrame();
 }
}

void nouvelle_image(){
 background(255);
 for(int ax=0;ax<width;ax+=precision) {
   for(int by=0;by<height;by+=precision) {
     // capturer la couleur sur un point de l'image
     color pix = a.pixels[by*width+ax];
     fill(pix);
     // la longueur du mot détermine sa taille
     String lemot=mot[countword];
     textSize(lemot.length());
     
     text(lemot, ax, by);
     
     // mot suivant
     countword++;
     if(countword >=mot.length) {
       countword=0;
     }
   }
 }
}