RGB vs CMJN -> addition vs soustraction
Illusion de Couleurs
RGB/HSB/HSL

S’il est possible d’écrire et afficher du texte au sein d’une page HTML il est également possible d’en dessiner sur la surface de dessin qu’est l’objet <canvas>. Cela permet ainsi de dessiner et afficher des interfaces par dessus le canvas ou mainpuler une chaine de caractère afin d’en changer son affichage ou son tracé.
P5js permet d’afficher un texte sur la surface de dessin par l’utilisation de la fonction text(text, x, y, w, h) où :
Si aucune fonction d’affichage ne définie les paramètres le texte sera afficher avec une typographie, une taile et un alignement gauche par défaut. Pour changer les paramètre d’affichage nous utiliserons les méthodes suivante :
textAlign(Horizontal, [Vertical]) définie l’alignement horizontal et vertical d’un texte où :LEFT, RIGHT ou CENTERTOP, BOTTOM, CENTER ou BASELINEtextSize(taille) définie le corps du texte en pixelstextLeading(interligne) définie l’interligne du texte en pixelstextFont(font) définie la typographie utilisée pour le texte. La typographie peut être chargée dans le programme via l’utilisation de la fonction loadFont(url) (voir référence)[https://p5js.org/reference/#/p5/loadFont] ou appelé depuis le css par l’utilisation de son nom de la manière suivante textFont('georgia')textStyle(style) définie le style de texte. Les styles sont NORMAL, BOLD et ITALICp5js permet également de récupérer les information de taille d’un texte telle que sa largeur ou sa hauteur, saouvent necessaire pour le dessin d’interfaces de datavisualization. Afin de connaitre la largeur d’un texte nous utiliserons la méthode textWidth(texte) qui renverra la taille du texte envoyé en paramètre. Nous noterons qu’il est necesseraire de définir en amont les paramètres d’affichage du texte sans quoi la largeur renvoyée sera calculé pour un typographie et taille de base du programme.
La hauteur d’un texte se décompose en deux éléments : la hauteur des hampes ascendante et descendante.

Pour connaître ces taille avec p5js nous utiliserons les méthodes suivante :
textAscent() renvoie la hauteur ascendante en pixels de la typographie utiliséetextDescent() renvoie la hauteur descendante en pixels de la typographie utiliséeAinsi pour connaitre la hauteur complète d’un ligne nous réaliserons le calcul suivant :
var hauteur = textAscent() + textDescent();
Au dela de la mise en forme de texte il est possible de manipuler une chaine de caractère afin de la composer. Cela permet par exemple, à partir d’un paragraphe, de lister et compter le nombre de mot, ou de décomposer le texte en caractère afin de dessiner chaque caractère indépendamment.
La méthodes split(text, param) permet de diviser une chaîne de caractères à partir d’un séparateur pour fournir un tableau de sous-chaînes. Le premier paramètre text est le texte à diviser, le second param défini le séparateur à utiliser pour scinder le texte.
Pour l’exemple suivant nous utiliserons en texte de référence la citation de Paul Rand suivante :
There are no formulas in creative work. I do many variations, which is a question of curiosity. I arrive at many different configurations-some just slight variations, others more radical-of an original idea. It is a game of evolution.
Si nous souhaitons compter le nombre de mots utiliser dans cette citation il nous suffira de diviser le texte en en tavleau de mots et d’en demander sa taille. Chaque mot étant séparé d’une espace, nous utiliserons celle-ci comme spérateur de notre méthode.
var quotes = "There are no formulas in creative work. I do many variations, which is a question of curiosity. I arrive at many different configurations-some just slight variations, others more radical-of an original idea. It is a game of evolution.";
var wordsArray = split(quotes, " ");
var numberOfWord = wordsArray.length;
Nous noterons également qu’il est possible de diviser une chaîne de caractère en tableau de caractère si notre séparateur est défini comme vide. Nous récupérons ainsi un tableau contenant l’ensemble des caractères (espces et ponctuation incluses).
var quotes = "There are no formulas in creative work. I do many variations, which is a question of curiosity. I arrive at many different configurations-some just slight variations, others more radical-of an original idea. It is a game of evolution.";
var charArray = split(quotes, "");
var numberOfChar = charArray.length;

Au delà de la manipulation de la chaîne de caractère nous pouvons également manipuler le tracé d’un texte et de se typographie par l’utilisation de l’objet p5.Font. Cet objet de p5js est une implémentation de la librairie opentype.js permettant de parser et mainpuler des typographies aux formats OpenType (OTF) et True Type (TTF). Par son utilisation nous pourrons récupérer le tracé vectoriel d’un texte sous forme d’un tableau de coordonées pour créer, manipuler, interagir ou animer avec le tracé du texte.
Pour fonctionner la librairie aura besoins de charger dans sa mémoire l’ensemble de la typographie, aussi nous ne pourrons pas utiliser d’appels de typographies chargées en css, ces dernières étant encodées pour le DOM. Aussi la première étape consiste à charger la typographie à manipuler de la manière suivante :
var font;
function preload(){
font = loadFont("./MuktaMahee-Bold.ttf");
}
Nous nottons ici l’utilisation de la fonction preload(). Cette fonction, appelée avant le setup() est utiliser afin de gérer le chargement de fichiers et assets de manière asynchrone. Si cette fonction est utilisée le setup() attendra la fin de chargement des assets avant de passer au draw().
Un fois la typographie chargée nous pouvons utiliser la méthode p5.Font.textToPoints(text, x, y, taille, [options]) afin de calculer la liste de points composant notre texte pour une typographie et taille donnée. Les paramètres sont les suivants :
sampleFactor Ratio du nombre de point par tracé. Par défaut ce paramètre est 0.25. Plus le paramètre sera grand plus nous aurons de points sur le tracé.simplifyThreshold Si ce paramètre est différent de 0 alors des valeurs colinéaires seront retirées du tableau de points. Des points sont dit colinéaires s’ils sont tous sur la même droite D.Ainsi pour obtenir notre liste de coordonées nous écrirons :
var pointsList = font.textToPoints('Hello World!', 0, 0, 75, {
sampleFactor: 0.25,
simplifyThreshold: 0
});
Nous pourrons alors naviguer dans la liste de points par l’utilisation d’une boucle for afin de manipuler ou dessiner notre tracé de la manière suivante :
for(var i=0; i<pointsList.length; i++){
var point = pointsList[i];
ellipse(p.x, p.y, 4, 4);
}
Nous noterons ici que le tableau pointsList`est un tableau de coordonée 2D. Aussi nous pouvons récupérer indépendamment les coordonées x et y par l’appel des variable de chaque objet présent dans le tableau où :
pointsList[i].x correspond à la position x du point ipointsList[i].y correspond à la position y du point iDe la même manière nous pourrons récupérer la bounding box (boite) du texte par l’utilsation de la méthode p5.Font.textBounds(text, x, y, taille). Les paramètres sont les suivants :
var bounds = font.textBounds('Hello World!', 0, 0, 75);
La méthode nous reverra alors un objet pour lequel nous pourrons interroger les variables suivantes :
bounds.x position x de la bounding boxbounds.y position y de la bounding boxbounds.w largeur w de la bounding boxbounds.h hauteur h de la bounding box