JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Retouche d'images Sam 15 Jan 2011 - 15:55 | |
| Retouches élémentaires, sans prétention (en fait c'est IrfanView qui fait tout le boulot), redimensionnement et découpages. L'avantage c'est de voir simultanément l'image d'origine et l'image résultat, pour éventuellement reprendre la retouche en modifiant des paramètres. Il faut éventuellement modifier quelques paramètres (en tête du programme) en fonction de ses ressources, et disposer de IrfanView. Il y a une aide élémentaire intégrée. - Code:
-
' Retouches.bas retouches d'images DIM w0, h0, wi, hi, iv$, xl, yl, wl, no, nl, nc, ng, nq, ns, nr, nd, nrg, nrd, i% DIM no1, no2, f$, fr$, ftm$, fi$, n, a$, b$, ng1, ng2, ng3, ng4, pas, spa, pr, wim, him DIM nf, nz, nv, nop, w, h, wn, hn, x, y, sf$, eg, rc$ LABEL Grille, Exec, Maj, Infos, Help ' ========================= A AJUSTER ==================================== f$ = "C:\Graph\Jpg\IMG_2022.jpg": ' une image quelconque fr$ = "Z:\Resul.jpg": ' image résultant de la retouche ftm$ = "Z:\Infos.txt": ' fichier de manoeuvre iv$ = "C:\Progra~1\Irfanv~1\i_view32.exe ": ' chemin d'IrfanView ' ======================================================================== h0 = 1040: ' hauteur Form 0, à ajuster en fonction de la taille du moniteur wi = 640: ' fenêtres (pictures 1 et 2) d'affichage des images (idem) hi = wi*3/4 w0 = 850 xl = wi+10: yl = hi+10: wl = w0-wi-20 pas = 0: ' pas de la grille, en pixels sf$ = "" rc$ = CHR$(13) + CHR$(10)
WIDTH 0, w0: HEIGHT 0, h0: COLOR 0, 220,255,255 FONT_SIZE 0, 10: FONT_BOLD 0 PICTURE 1: TOP 1, 20: LEFT 1, 5: WIDTH 1, wi: HEIGHT 1, hi PICTURE 2: TOP 2, hi+40: LEFT 2, 5: WIDTH 2, wi: HEIGHT 2, hi no1 = 10 LIST no1: TOP no1, 50: LEFT no1, xl: WIDTH no1, 180: HEIGHT no1, 140 no2 = no1 + 1 LIST no2: TOP no2, 200: LEFT no2, xl: WIDTH no2, 180: HEIGHT no2, 140 no = 20 BUTTON no: TOP no, 370: LEFT no, xl: WIDTH no, 180: CAPTION no, "Affichage grille (On/Off)" ON_CLICK no, Grille no = no + 1 CONTAINER_OPTION no: TOP no, 400: LEFT no, xl: WIDTH no, 180: CAPTION no, "Quadrillage" nop = no: no = no + 1 OPTION no: PARENT no, nop: TOP no, 20: LEFT no, 10: CAPTION no, "50 pixels": ng1 = no: no = no + 1 OPTION no: PARENT no, nop: TOP no, 40: LEFT no, 10: CAPTION no, "100 pixels": ng2 = no: no = no + 1 OPTION no: PARENT no, nop: TOP no, 60: LEFT no, 10: CAPTION no, "200 pixels": ng3 = no: no = no + 1 OPTION no: PARENT no, nop: TOP no, 80: LEFT no, 10: CAPTION no, "400 pixels": ng4 = no: no = no + 1
no = 30 ALPHA no: TOP no, 0: LEFT no, 10: CAPTION no, "Image:" no = no + 1 EDIT no: TOP no, 0: LEFT no, 80: WIDTH no, 565: TEXT no, f$: nf = no no = no + 1 yl = hi + 20 ALPHA no: TOP no, yl: LEFT no, 10: CAPTION no, "Résultat:" no = no + 1 EDIT no: TOP no, yl: LEFT no, 80: WIDTH no, 565: TEXT no, fr$: nz = no no = no + 1 BUTTON no: TOP no, 2: LEFT no, xl-5: WIDTH no, 75: HEIGHT no, 18 CAPTION no, CHR$(27) + " Valider": ON_CLICK no, Maj no = no + 1 BUTTON no: TOP no, 2: LEFT no, xl+130: WIDTH no, 50: HEIGHT no, 18 CAPTION no, "?": ON_CLICK no, Help no = no + 1
yl = hi + 40 ALPHA no: TOP no, yl: LEFT no, xl: WIDTH no, wl: HEIGHT no, 20: CAPTION no, "Luminosité" no = no + 1 ALPHA no: TOP no, yl: LEFT no, xl+90: WIDTH no, wl: HEIGHT no, 20: CAPTION no, "Contraste" no = no + 1: yl = yl + 20 SPIN no: TOP no, yl: LEFT no, xl: WIDTH no, wl/3: HEIGHT no, 20: nl = no no = no + 1 SPIN no: TOP no, yl: LEFT no, xl+90: WIDTH no, wl/3: HEIGHT no, 20: nc = no no = no + 1: yl = yl + 30 ALPHA no: TOP no, yl: LEFT no, xl: WIDTH no, wl: HEIGHT no, 20: CAPTION no, "Gamma" no = no + 1 ALPHA no: TOP no, yl: LEFT no, xl+90: WIDTH no, wl: HEIGHT no, 20: CAPTION no, "Netteté" no = no + 1: yl = yl + 20 SPIN no: TOP no, yl: LEFT no, xl: WIDTH no, wl/3: HEIGHT no, 20: ng = no no = no + 1 SPIN no: TOP no, yl: LEFT no, xl+90: WIDTH no, wl/3: HEIGHT no, 20: ns = no no = no + 1: yl = yl + 30 ALPHA no: TOP no, yl: LEFT no, xl: WIDTH no, wl: HEIGHT no, 20: CAPTION no, "Qualité (jpgq)" no = no + 1: yl = yl + 20 SPIN no: TOP no, yl: LEFT no, xl: WIDTH no, wl/3: HEIGHT no, 20: nq = no no = no + 1: yl = yl + 30
CHECK no: TOP no, yl: LEFT no, xl: HEIGHT no, 20: WIDTH no, 170 CAPTION no, "Redim (proportionnel)": nr = no no = no + 1: yl = yl + 20 ALPHA no: TOP no, yl+2: LEFT no, xl: WIDTH no, 10: HEIGHT no, 20: CAPTION no, "w=" no = no + 1 SPIN no: TOP no, yl: LEFT no, xl+20: WIDTH no, wl/3: HEIGHT no, 20 no = no + 1 ALPHA no: TOP no, yl+2: LEFT no, xl+90: WIDTH no, 10: HEIGHT no, 20: CAPTION no, "h=" no = no + 1 SPIN no: TOP no, yl: LEFT no, xl+110: WIDTH no, wl/3: HEIGHT no, 20 no = no + 1: yl = yl + 30 CHECK no: TOP no, yl: LEFT no, xl: HEIGHT no, 20: WIDTH no, 170 CAPTION no, "Découpage": nd = no no = no + 1: yl = yl + 20 ALPHA no: TOP no, yl+2: LEFT no, xl: WIDTH no, 10: HEIGHT no, 20: CAPTION no, "x=" no = no + 1 SPIN no: TOP no, yl: LEFT no, xl+20: WIDTH no, wl/3: HEIGHT no, 20 no = no + 1 ALPHA no: TOP no, yl+2: LEFT no, xl+90: WIDTH no, 10: HEIGHT no, 20: CAPTION no, "y=" no = no + 1 SPIN no: TOP no, yl: LEFT no, xl+110: WIDTH no, wl/3: HEIGHT no, 20 no = no + 1: yl = yl + 30 ALPHA no: TOP no, yl+2: LEFT no, xl: WIDTH no, 10: HEIGHT no, 20: CAPTION no, "w=" no = no + 1 SPIN no: TOP no, yl: LEFT no, xl+20: WIDTH no, wl/3: HEIGHT no, 20 no = no + 1 ALPHA no: TOP no, yl+2: LEFT no, xl+90: WIDTH no, 10: HEIGHT no, 20: CAPTION no, "h=" no = no + 1 SPIN no: TOP no, yl: LEFT no, xl+110: WIDTH no, wl/3: HEIGHT no, 20 no = no + 1: yl = yl + 30 ALPHA no: TOP no, yl: LEFT no, xl: WIDTH no, wl: HEIGHT no, 20: CAPTION no, "Rotation" no = no + 1: yl = yl + 20 CHECK no: TOP no, yl: LEFT no, xl: CAPTION no, "Gauche" : nrg = no no = no + 1 CHECK no: TOP no, yl: LEFT no, xl+90: WIDTH no, 90: CAPTION no, "Droite": nrd = no no = no + 1: yl = yl + 40 CHECK no: TOP no, yl: LEFT no, xl: WIDTH no, 180: CAPTION no, "Niveaux de gris": nv = no no = no + 1: yl = yl + 60 BUTTON no: TOP no, yl: LEFT no, xl+40: CAPTION no, "Ok" ON_CLICK no, Exec
MIN nl, 0: MAX nl, 100: POSITION nl, 0: MIN nc, 0: MAX nc, 100: POSITION nc, 0 MIN ng, 0: MAX ng, 100: POSITION ng, 0: MIN ns, 0: MAX ns, 100: POSITION ns, 0 MIN nq, 0: MAX nq, 100: POSITION nq, 0
GOSUB Maj
END
Grille: IF CHECKED(ng1) = 1 THEN pas = 50 IF CHECKED(ng2) = 1 THEN pas = 100 IF CHECKED(ng3) = 1 THEN pas = 200 IF CHECKED(ng4) = 1 THEN pas = 400 IF pas = spa FILE_LOAD 1, f$: STRETCH_ON 1: pas = 0: spa = 0: RETURN END_IF IF pas > 0 FILE_LOAD 1, f$: STRETCH_ON 1 eg = 4: IF wim < 1500 THEN eg = 2 2D_TARGET_IS 1: 2D_PEN_WIDTH eg: 2D_PEN_COLOR 255,255,0: ' jaune FOR x = pas TO wim STEP pas 2D_LINE x, 0, x, him NEXT x FOR y = pas TO him STEP pas 2D_LINE 0, y, wim, y NEXT y END_IF spa = pas RETURN
Exec: f$ = TEXT$(nf) IF f$ <> sf$ n = no1: fi$ = f$: GOSUB Infos wim = w: him = h IF (w/h) <> (wi/hi) IF w > h hn = INT(h*wi/w): wn = wi IF hn > hi THEN hn = hi: wn = INT(hn*w/h) HEIGHT 1, hn: WIDTH 1, wn ELSE wn = INT(w*hi/h): hn = hi IF wn > wi THEN wn = wi: hn = INT(wn*h/w) WIDTH 1, INT(w*hi/h): HEIGHT 1, hn END_IF ELSE WIDTH 1, wi: HEIGHT 1, hi END_IF FILE_LOAD 1, f$: STRETCH_ON 1 sf$ = f$ END_IF a$ = "" IF POSITION(nl) > 0 a$ = a$ + " /bright="+STR$(POSITION(nl)) END_IF IF POSITION(nc) > 0 a$ = a$ + " /contrast="+STR$(POSITION(nc)) END_IF IF POSITION(ng) > 0 a$ = a$ + " /gamma="+STR$(POSITION(ng)) END_IF IF POSITION(ns) > 0 a$ = a$ + " /sharpen="+STR$(POSITION(ns)) END_IF IF POSITION(nq) > 0 a$ = a$ + " /jpgq="+STR$(POSITION(nq)) END_IF IF CHECKED(nr) = 1 wn = POSITION(nr+2): hn = POSITION(nr+4) IF wn = 0 THEN wn = INT(wim*hn/him) IF hn = 0 THEN hn = INT(him*wn/wim) a$ = a$ + " /resize=("+STR$(wn)+","+STR$(hn)+")" END_IF IF CHECKED(nd) = 1 a$ = a$ + " /crop=("+STR$(POSITION(nd+2))+","+STR$(POSITION(nd+4))+"," a$ = a$ + STR$(POSITION(nd+6))+","+STR$(POSITION(nd+8))+")" END_IF IF CHECKED(nrg) = 1 a$ = a$ + " /rotate_l" END_IF IF CHECKED(nrd) = 1 a$ = a$ + " /rotate_r" END_IF IF CHECKED(nv) = 1 a$ = a$ + " /gray" END_IF fr$ = TEXT$(nz) EXECUTE_WAIT iv$ + f$ + a$ + " /convert=" + fr$ fi$ = fr$: n = no2: GOSUB Infos IF (w/h) <> (wi/hi) IF w > h hn = INT(h*wi/w): wn = wi IF hn > hi THEN hn = hi: wn = INT(hn*w/h) HEIGHT 2, hn: WIDTH 2, wn ELSE wn = INT(w*hi/h): hn = hi IF wn > wi THEN wn = wi: hn = INT(wn*h/w) WIDTH 2, INT(w*hi/h): HEIGHT 2, hn END_IF ELSE WIDTH 2, wi: HEIGHT 2, hi END_IF FILE_LOAD 2, fr$: STRETCH_ON 2 RETURN
Maj: f$ = TEXT$(nf) IF f$ <> sf$ n = no1: fi$ = f$: GOSUB Infos wim = w: him = h IF (w/h) <> (wi/hi) IF w > h hn = INT(h*wi/w): wn = wi IF hn > hi THEN hn = hi: wn = INT(hn*w/h) HEIGHT 1, hn: WIDTH 1, wn ELSE wn = INT(w*hi/h): hn = hi IF wn > wi THEN wn = wi: hn = INT(wn*h/w) WIDTH 1, INT(w*hi/h): HEIGHT 1, hn END_IF ELSE WIDTH 1, wi: HEIGHT 1, hi END_IF FILE_LOAD 1, f$: STRETCH_ON 1 sf$ = f$ END_IF RETURN
Infos: CLEAR n ITEM_ADD n, fi$: ITEM_ADD n, "----------------------------------" EXECUTE_WAIT iv$ + fi$ + " /info=" + ftm$ FILE_OPEN_READ 1, ftm$ WHILE FILE_EOF(1) = 0 FILE_READLN 1, a$ IF LEFT$(a$, 16) = "Image dimensions" a$ = MID$(a$, 20, 100): i% = INSTR(a$, " x") b$ = LEFT$(a$, i%-1): w = VAL(b$) a$ = MID$(a$, i%+3, 100): i% = INSTR(a$, " ") h = VAL(LEFT$(a$, i%-1)) b$ = b$ + " x " + STR$(h) + " pixels" ITEM_ADD n, b$ END_IF IF LEFT$(a$, 9) = "Disk size" i% = INSTR(a$, "("): a$ = MID$(a$, i%+1, 100): i% = INSTR(a$, " ") a$ = LEFT$(a$, i%-1): b$ = a$ + " octets." ITEM_ADD n, b$ END_IF IF LEFT$(a$, 14) = "File date/time" b$ = MID$(a$, 18, 11) + RIGHT$(a$, 8) ITEM_ADD n, b$ END_IF END_WHILE FILE_CLOSE 1 FILE_DELETE ftm$ RETURN
Help: a$ = " - RETOUCHE D'IMAGES -" + rc$ + rc$ a$ = a$ + "CHARGER UNE NOUVELLE IMAGE:" + rc$ a$ = a$ + "- Modifier le champ 'Image', donner le chemin complet de l'image," + rc$ a$ = a$ + " puis bouton 'Valider'." a$ = a$ + rc$ + " L'image s'affiche dans la fenêtre, ses paramètres s'affichent à droite." a$ = a$ + rc$ + "- On peut modifier également le champ 'Résultat'." a$ = a$ + rc$ + rc$ + "RETOUCHES:" + rc$ a$ = a$ + "- Choisir les paramètres de la retouche (partie inférieure droite de l'écran)," a$ = a$ + rc$ +" puis bouton 'Ok'. Le traitement s'effectue, l'image résultat s'affiche" a$ = a$ + rc$ + " dans la fenêtre inférieure gauche de l'écran." + rc$ a$ = a$ + "- Les paramètres Luminosité, Contraste, Gamma, Netteté, et Qualité" a$ = a$ + rc$ + " s'expriment sous forme d'une valeur comprise entre 0 et 100." a$ = a$ + rc$ + "- On peut recommencer comme on veut en modifiant les paramètres." a$ = a$ + rc$ + "- Tous les types de retouche peuvent se cumuler en une seule fois." a$ = a$ + rc$ + rc$ + "REDIMENSIONNEMENT:" + rc$ a$ = a$ + "Garnir les paramètres: nouvelle largeur et hauteur en pixels, puis valider" a$ = a$ + rc$ + "l'option 'Redim'." a$ = a$ + rc$ + "Pour un redimensionnement proportionnel (sans déformation de l'image)," a$ = a$ + rc$ + "laisser une des deux valeurs à zéro, elle s'ajustera automatiquement." a$ = a$ + rc$ + rc$ + "DÉCOUPAGES:" + rc$ a$ = a$ + "Pour faciliter les découpages de parties d'images, on peut afficher une" a$ = a$ + rc$ + "grille de dimensions choisies, en pixels, sur l'image d'origine:" a$ = a$ + rc$ + "bouton 'Affichage grille' (un deuxième appui efface la grille)." a$ = a$ + rc$ + "Garnir les paramètres de découpage: x, y, largeur et hauteur en pixels" a$ = a$ + rc$ + "puis valider l'option 'Découpage'." a$ = a$ + rc$ + rc$ + "ROTATION:" + rc$ a$ = a$ + "La rotation s'effectue par quarts de tour (90°), à gauche ou à droite." a$ = a$ + rc$ + rc$ + "NIVEAUX DE GRIS:" + rc$ a$ = a$ + "L'image est convertie en noir et blanc (monochrome)." MESSAGE a$ RETURN | |
|