====== MELANGE ====== Porteur(s) du projet : Lisa Guillermin Date : Mai 2017 Contexte : cours de “Culture & pratiques techniques” Source : OpenProcessing ===== BUT ===== Je travail autour de la relation que nous avons avec les images qui nous entourent dans l'espace public. Nous sommes sans cesse confrontés à un nombre incalculable d'images qui s’entremêlent et se perdent dans la multitude. J'ai donc cherché un programme pouvant nous mettre en confrontation avec ce phénomène. Le programme développé par Tomasz Sulej (generateme.blog@gmail.com, http://generateme.tumblr.com, Licence: http://unlicense.org/) se rapproche de celui développé par le Studio HELMO. Leur travail //Stratigraphie//, suit une logique d’empilement de couches, de stratification. L’accumulation de sens, de plans, et d’encres produit au final un « feuilleté» dense. Ceci retranscrit l'équivocité du monde, un monde sur un plan, dans lequel on ne distingue plus les formes ni l’enjeu. Des images porteuses de sens au départ, qui se perdent dans la multitude. ===== TRAVAIL D'HELMO ===== {{:wiki:projets:projets-processing-dsaa1:helmo_stratigraphie3-low.jpg?200|}} {{:wiki:projets:projets-processing-dsaa1:c1bbb30fb4ffe1e586efe5227ea67d9b.jpg?200|}} {{:wiki:projets:projets-processing-dsaa1:helmo_stratigraphie3-low.jpg?200|}} ===== IMAGES UTILISEES ===== {{:wiki:projets:projets-processing-dsaa1:bl1005.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:bl1000.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:bl1001.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:bl1002.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:bl1003.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:bl1004.jpg?100|}} ===== CODE (avec problèmes) ===== Les classes (3) sont intégrées au code. Il n'est encore pas fini d'être commenté. // Usage: // * Appuyer sur espace pour sauvegarder // * Cliquer pour changer les paramètres de manière aléatoire // Configurer le nom de fichier de la cible String filename = «test»; // Nom de l’image de base String fileext = «.jpg»; // Son format String foldername = «./»; // nom du dossier // Mélange de la couleur et du canal int mode = BLEND_VALUE; // BLEND_VALUE ou BLEND_COLOR // Si on veut faire varier la valeur, il faut définir ce que l’on veut faire varier int VALUE_FOR_BLEND = HUE; // On fait ceci seulement si on veut faire varier la valeur des images //green() blue() alpha() hue() saturation() >> Vert () bleu () alpha () teinte () saturation () // nombre aléatoire de source utilisé boolean random_source = false; // Initialisation de la variable boolean utilisée pour les tests conditionnels int max_display_size = 1000; // Taille de la fenêtre de visualisation (quelle que soit la taille de l’image) boolean do_blend = false; // Fusionner l’image après le processus int blend_mode = OVERLAY; // Type de mélange > Mélange une région de pixels d’une image à une autre //(ou en elle-même à nouveau) avec un support de canal alpha complet. >>https://processing.org/reference/blend_.html //Il existe un choix des modes suivants pour mélanger les pixels source (A) avec ceux de pixels dans l’image de destination (B): // BLEND, ADD, ADD, SUBTRACT, DARKEST, LIGHTEST, DIFFERENCE, EXCLUSION, MULTIPLY, SCREEN, OVERLAY, HARD_LIGHT - SCREEN, MULTIPLY, SOFT_LIGHT, DODGE, BURN //Configurer l’ensemble des images sources // utiliser les noms de dossier des variables ci-dessous pour construire l’ensemble // exemple: mes images ont des noms: bl1000.jpg, bl1001.jpg etc ... // et sont situés dans le dossier ‘bl /’ // J’ai 6 d’entre elles avec un préfixe constant: «bl / bl100» (pattern_prefix) // alors chaque fichier a un chiffre de séquence de 0 à 5 (pattern_init et pattern_length) // avec les chiffres ‘pattern_size’ pour la séquence (ici: un chiffre) // à la fin ‘file_ext’ est ajouté // ci-dessous le réglage produit six noms: bl / bl1000.jpg, bl / bl1001.jpg, bl / bl1002.jpg, bl / bl1003.jpg, bl / bl1004.jpg, bl / bl1005.jpg //»final static» et le mot-clé utilisé pour définir une variable comme une «variable de classe» et une méthode comme «méthode de classe». //Lorsqu’une variable est déclarée avec le mot-clé statique, toutes les instances de cette classe partagent la même variable. //Lorsqu’une classe est définie avec le mot-clé statique, //ses méthodes peuvent être utilisées sans créer une instance de la classe. final static String pattern_prefix = «bl/bl100»; final static String file_ext = «.jpg»;// Format final static int pattern_init = 0; // Numéro de départ final static int pattern_length = 6; // Nombre d’images qui composent l’ensemble, ne pas en utiliser plus de 10. final static int pattern_size = 1; // Nombre de chiffre final static int BLEND_COLOR = 0; final static int BLEND_VALUE = 1; // Initialisation de la classe Mémoire tampon du travail : PGraphics PGraphics buffer; // Initialisation de la classe PImage PImage img; String sessionid; // Variable chaine de caractères, permet de stocker du texte, nom de la variable PImage[] sset = new PImage[pattern_length]; // Création d’un nouvelle objet Image correspondant à une des images définit avec un chiffre dans patern_length void setup() { // Initialisation de la Méthode Void Setup afin de déclarer les fonctions valables tout au long du programme. sessionid = hex((int)random(0xffff), 4); //hex permet de convertir un nombre entier en une chaine // contenant la notation hexadécimale équivalente. Ici, cela correspond à une apparition aléatoire) CHANGER LE 4 NE CHANGE RIEN ??? img = loadImage(foldername+filename+fileext); //chargement de l’image (nom du dossier, nom du fichier, extension du fichier) img.loadPixels(); // La classe PImage contient des champs pour la largeur et la hauteur de l’image, ainsi qu’un tableau appelé pixels [] qui contient les valeurs pour chaque pixel dans l’image. //Cette méthode permet d’accéder facilement aux pixels de l’image et au canal alpha et à simplifier le processus de composition. //Avant d’utiliser le tableau pixels [], il faut avoir utiliser la méthode loadPixels () sur l’image pour que les données de pixels soient correctement chargées. buffer = createGraphics(img.width, img.height); //Une fois que la class a été créée, il suffit de mettre «create» pour stocker de nouvelles infos. buffer.loadPixels(); // Calcul de la taille de la fenêtre float ratio = (float)img.width/(float)img.height;// Calcul du ratio largeur sur hauteur de l’image (w et h = n’importe quel nombre sur IR) int neww, newh; // nouvelles variables de type entier : neww (= nouvelle largeur) et newh (= nouvelle hauteur) if (ratio < 1.0) { neww = (int)(max_display_size * ratio); // Nouvelle largeur = max_display_size (= 1000 = Taille de la fenêtre de visualisation) // multipliée par la largeur de l’image (lorsque la largeur divisée par la hauteur est strictement inférieur à 0) pour que l’image s’adapte à la taille de la fenêtre newh = max_display_size; // Pareil avec la hauteur de l’image } else { neww = max_display_size; // Alors la nouvelle largeur de l’image est égal à la largeur de la fenêtre newh = (int)(max_display_size / ratio); // et la nouvelle heuteur et un nom entier correspondant à la taille de la fenêtre divisé par le ratio } size(neww, newh); // Donne la nouvelle taille for (int i=0; i> 16) &0xff; //0x défini une couleur hexadécimale en RGB et ff signifie qu’elle est codée sur 1 (255/255) // x sur 16 bits v.y = (c >> 8) &0xff; // y sur 8 v.z = c &0xff; // z sur 4 return v; } void processImage() { //Initialisation d’une nouvelle variable (qui n’est pas reconnue?) qui renvoie au processus de l’image int[] idx = new int[pattern_length]; // déclaration de la variable changement d’image (de 0 à 5) (dx = déplacement) for (int i=0; i5?channel-6:channel; float cc; switch(ch) { case RED: cc = red(c); break; case GREEN: cc = green(c); break; case BLUE: cc = blue(c); break; case HUE: cc = hue(c); break; case SATURATION: cc = saturation(c); break; default: cc= brightness(c); break; } return channel>5?255-cc:cc; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ===== RENDU ===== {{:wiki:projets:projets-processing-dsaa1:res_f81233a8_test.jpg?300|}} {{:wiki:projets:projets-processing-dsaa1:res_6a2e0ab3_test.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:res_6a2e08ce_test.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:res_6ebefba1_test.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:res_59acc3aa_test.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:res_81d52e6d_test.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:res_184d3753_test.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:res_c85efd6e_test.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:res_e49eea52_test.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:res_f812e922_test.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:res_f812fbcc_test.jpg?100|}} {{:wiki:projets:projets-processing-dsaa1:res_f81233a8_test.jpg?100|}}