Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Annotation de photos numériques | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Annotation de photos numériques Sam 20 Fév 2010 - 18:45 | |
| J'ai voulu appeler le sujet 'Légendage de photos numériques', mais d'abord légendage n'est pas français, et puis je me suis dit: légendage... les gens d'âge... là je tendais une perche à jjn4 ! Bref, il s'agit d'ajouter un texte à des photos numériques (ici le nom du fichier, et/ou la date, pour la démo, mais c'est très perfectible). Par exemple pour affichage sur TV (diaporama) ou cadre photo. Voilà déjà le programme, les remarques suivront: - Code:
-
' Ajout de légendes à des photos numériques dim f$, fr$, fm$, fj$, iv$, tx$, typ$ dim i, k, wi, hi, xc, yc, ltx dim xxf, xxs, xxc dim w, h, dat$, a$, pos, nbf, nbs, nbc dim fonte$(10), siz(10), cr(10), cg(10), cb(10) Label Clicop4, Clicop15, Clicop30, Clicop40, Clicop50, Affic, Exec, Fin, Jpgdim, ru, rv
fr$ = "C:\Temp\Resul.jpg" fj$ = "C:\Temp\Tmp.txt" iv$ = "C:\progra~1\Irfanv~1\i_view32.exe "
fonte$(1) = "Courier New": fonte$(2) = "Lucida Console" fonte$(3) = "FixedSys": fonte$(4) = "OCR A Extended" fonte$(5) = "Bitstream Vera Sans Mono" for nbf = 1 to 20 if fonte$(i) = "" then exit_for next i nbf = nbf - 1: xxf = 2 siz(1) = 30: siz(2) = 28: siz(3) = 26: siz(4) = 24: siz(5) = 22: siz(6) = 20 for nbs = 1 to 20 if siz(i) = 0 then exit_for next nbs nbs = nbs - 1: xxs = 1 cr(0)=0: cg(0)=0: cb(0)=0: cr(1)=0: cg(1)=0: cb(1)=128 cr(2)=0: cg(2)=128: cb(2)=0: cr(5)=128: cg(5)=0: cb(5)=128 cr(6)=128: cg(6)=64: cb(6)=0: cr(7)=128: cg(7)=128: cb(7)=128 nbc = 8: xxc = 0
Open_Dialog 1 f$ = File_Name$(1): Delete 1 if f$ = "_" then goto Fin
GOSUB Jpgdim
wi = 800: hi = wi*3/4
List 70: Left 70, 5: Top 70, hi+20: Width 70, 450: Height 70, 24 tx$ = f$ + " (" + str$(w) + " x " + str$(h) + ") - " + dat$ Item_Add 70, tx$ List 71: Left 71, 520: Top 71, hi+20: Width 71, 280: Height 71, 24: Hide 71 pos = 7: ' position du texte typ$ = "ND": ' type de texe: nom fichier + date
WIDTH 0, wi+25: HEIGHT 0, hi+280 PICTURE 1: Top 1, 5: Left 1, 5: WIDTH 1, wi: HEIGHT 1, hi: ' fenêtre d'affichage de l'image FILE_LOAD 1, f$: STRETCH_ON 1: ' affichage de l'image principale Button 60: LEFT 60, wi-110: Top 60, hi+90: Width 60, 100: Caption 60, "Aperçu" On_Click 60, Affic Button 2: Left 2, wi-110: Top 2, hi+130: Width 2, 100: Caption 2, "Exécuter" On_Click 2, Exec Button 3: Left 3, wi-110: Top 3, hi+200: Width 3, 100: Caption 3, "Quitter" On_Click 3, Fin
Container_Option 4: Top 4, hi+60: Left 4, 5: Height 4, 170: Width 4, 200 Caption 4, " Position du texte: " Option 5: Parent 5, 4: top 5, 20: left 5, 10: Caption 5, "NO" Option 6: Parent 6, 4: top 6, 20: left 6, 80: Caption 6, "Nord" Option 7: Parent 7, 4: top 7, 20: left 7, 150: Caption 7, "NE" Option 8: Parent 8, 4: top 8, 80: left 8, 10: Caption 8, "Ouest" Option 9: Parent 9, 4: Top 9, 80: Left 9, 80: Caption 9, "Centre" Option 10: Parent 10, 4: Top 10, 80: Left 10, 150: Caption 10, "Est" Option 11:Parent 11,4: Top 11,140: Left 11,10: Caption 11,"SO" Option 12:Parent 12,4: Top 12,140:Left 12,80: Caption 12,"Sud" Option 13:Parent 13,4: Top 13,140:Left 13,150: Caption 13,"SE"
Container_Option 15: Top 15, hi+60: Left 15, 220: Height 15, 170: Width 15, 150 Caption 15, " Police: " Option 16: Parent 16, 15: top 16, 20: Left 16, 10: Caption 16, fonte$(1) Option 17: Parent 17, 15: Top 17, 40: Left 17, 10: Caption 17, fonte$(2) Option 18: Parent 18, 15: Top 18, 60: Left 18, 10: Caption 18, fonte$(3) Option 19: Parent 19, 15: Top 19, 80: Left 19, 10: Caption 19, fonte$(4) Option 20: Parent 20, 15: Top 20, 100: Left 20, 10: Caption 20, fonte$(5)
Container_Option 30: Top 30, hi+60: Left 30, 380: Height 30, 170: Width 30, 60 Caption 30, " Taille: " Option 31: Parent 31, 30: Top 31, 20: Left 31, 10: Caption 31, "30" Option 32: Parent 32, 30: Top 32, 40: Left 32, 10: Caption 32, "28" Option 33: Parent 33, 30: Top 33, 60: Left 33, 10: Caption 33, "26" Option 34: Parent 34, 30: Top 34, 80: Left 34, 10: Caption 34, "24" Option 35: Parent 35, 30: Top 35, 100: Left 35, 10: Caption 35, "22" Option 36: Parent 36, 30: Top 36, 120: Left 36, 10: Caption 36, "20"
Container_Option 40: Top 40, hi+60: Left 40, 450: Height 40, 170: Width 40, 80 Caption 40, " Couleur: " Option 41: Parent 41, 40: Top 41, 20: Left 41, 10: Caption 41, "Noir" Option 42: Parent 42, 40: Top 42, 36: Left 42, 10: Caption 42, "Bleu" Option 43: Parent 43, 40: Top 43, 52: Left 43, 10: Caption 43, "Vert" Option 44: Parent 44, 40: Top 44, 68: Left 44, 10: Caption 44, "Rouge" Option 45: Parent 45, 40: Top 45, 84: Left 45, 10: Caption 45, "Cyan" Option 46: Parent 46, 40: Top 46, 100: Left 46, 10: Caption 46, "Magenta" Option 47: Parent 47, 40: Top 47, 116: Left 47, 10: Caption 47, "Brun" Option 48: Parent 48, 40: Top 48, 132: Left 48, 10: Caption 48, "Gris"
Container_Option 50: Top 50, hi+60: Left 50, 540: Height 50, 170: Width 50, 130 Caption 50, " Texte: " Option 51: Parent 51, 50: Top 51, 30: Left 51, 10: Caption 51, "Nom du fichier" Option 52: Parent 52, 50: Top 52, 60: Left 52, 10: Caption 52, "Nom + Date"
Mark_On 12 Mark_On 17 Mark_On 31 Mark_On 41 Mark_On 52 FOR i = 5 TO 13 ON_CLICK i, Clicop4 NEXT i FOR i = 16 TO 20 ON_CLICK i, Clicop15 NEXT i FOR i = 31 TO 36 ON_CLICK i, Clicop30 NEXT i FOR i = 41 TO 48 ON_CLICK i, Clicop40 NEXT i On_Click 51, Clicop50 On_Click 52, Clicop50
END
Clicop4: for i = 5 to 13 If Clicked(i) = 1 then exit_for next i pos = i - 5 RETURN
Clicop15: for i = 16 to 16 + nbf - 1 If Clicked(i) = 1 then exit_for next i xxf = i - 15 RETURN
Clicop30: for i = 31 to 31 + nbs - 1 If Clicked(i) = 1 then exit_for next i xxs = i - 30 RETURN
Clicop40: for i = 41 to 41 + nbc - 1 If Clicked(i) = 1 Then exit_for Next i xxc = i - 41 RETURN
Clicop50: if Clicked(51) = 1 typ$ = "N" Else typ$ = "ND" End_If RETURN
Affic: FILE_LOAD 1, f$: STRETCH_ON 1: ' affichage de l'image principale PRINT_TARGET_IS 1 FONT_NAME 1, chr$(34)+fonte$(xxf)+chr$(34) FONT_SIZE 1, siz(xxs) FONT_BOLD 1 FONT_COLOR 1, cr(xxc), cg(xxc), cb(xxc) if typ$ = "N" tx$ = upper$(f$) else tx$ = upper$(f$) + " - (" + dat$ + ")" end_if ltx = len(tx$) * siz(xxs)/1.2: ' longueur du texte en pixels (empirique...) select pos case 0: xc = 10: yc = 10: ' NO case 1: xc = (w - ltx)/2: yc = 10: ' Nord case 2: xc = w-ltx-10: yc = 10: ' NE case 3: xc = 10: yc = h/2: ' Ouest case 4: xc = (w - ltx)/2: yc = h/2: ' Centre case 5: xc = w-ltx-10: yc = h/2: ' Est case 6: xc = 10: yc = h-50: ' SO case 7: xc = (w - ltx)/2: yc = h-50: ' Sud case 8: xc = w-ltx-10: yc = h-50: ' SE end_select PRINT_LOCATE xc, yc: PRINT tx$ RETURN
Exec: ' sauvegarde de l'image dans fr$ GOSUB Affic: ' pour actualiser k = INSTR(fr$, "."): fm$ = LEFT$(fr$, k) + "bmp" FILE_SAVE 1, fm$ EXECUTE_WAIT iv$ + fm$ + " /jpgq=80 /convert=" + fr$ FILE_DELETE fm$ Item_Add 71, fr$: Show 71 RETURN
Fin: Terminate
Jpgdim: EXECUTE_WAIT iv$ + f$ + " /info=" + fj$ File_Open_Read 80, fj$ ru: File_ReadLn 80, a$ If left$(a$, 16) <> "Image dimensions" then goto ru a$ = mid$(a$, 20, Len(a$)-19) k = Instr(a$, " "): w = VAL(Left$(a$, k-1)) a$ = Mid$(a$, k + 3, len(a$) - k - 2) k = Instr(a$, " ") : h = val(left$(a$, k-1)) rv: File_ReadLn 80, a$ If Left$(a$, 9) <> "File date" Then Goto rv dat$ = mid$(a$, 18, 10): dat$ = dat$ + mid$(a$, 30, 6) File_Close 80: File_Delete fj$ Return Remarques: 1) il faut disposer de IrfanView, pour les caractéristiques de l'image et la conversion finale (bmp en jpg). 2) J'ai bien galéré pour le placement du texte dans l'image, avant de finir par comprendre que le placement en pixels n'est pas par rapport aux dimensions du picture, mais par rapport aux dimensions de l'image 'stretchée' dans le picture. Je m'explique, si j'ai un picture de 320x240 dans lequel je 'stretch_on' une image de 640x480, pour écrire dedans il faut dans le locate x,y exprimer x et y par rapport à 640 et 480, et non 320 et 240. Je ne sais pas si c'est voulu, mais c'est bien mieux pour la précision. Et la sauvegarde de l'image se fait dans ses dimensions d'origine et non les dimensions réduites. 3) Il y a plusieurs container_option, j'aurais aimé pouvoir mettre des options implicites au départ pour ne pas être obligé de tout cocher, mais ce n'est pas possible, apparemment. J'en ai parlé dans la rubrique 'à l'aide'. (-> voir edit ci-dessous) 4) Je regrette la limitation à 30 pour le Font_Size, pourquoi ? 5) La limite droite des container_option est parfois effacée par l'affichage des captions, on dirait qu'il affiche le texte plus des espaces... 6) Je n'ai utilisé ici que des polices 'fixes', sinon on ne sait pas calculer la longueur du texte, pour le centrage ou le positionnement à droite. Sinon, il n'y a rien de bien sorcier, et le programme est très améliorable, par exemple pour des textes différents, ou le traitement de séries d'images. J'avais trouvé un programme (gratuit) qui fait tout ça bien mieux, en ligne de commande, et une foultitude d'autres choses: ImageMagick, mais je voulais le faire en Panoramic. Edit: concernant le point 3), suite à une suggestion de Jean-Claude, il est bien prévu une possibilité de présélectionner une option: MARK_ON. Je l'ai rajouté dans le code, mais ça n'a d'effet que sur le premier des Container_Option, inefficace sur les 4 autres.
Dernière édition par JL35 le Dim 21 Fév 2010 - 14:37, édité 3 fois | |
| | | Invité Invité
| Sujet: Re: Annotation de photos numériques Dim 21 Fév 2010 - 1:38 | |
| Ton programme est intéressant. Je constate comme toi, qu'on ne peut imposer une option que pour le 1er container. J'ai essayé de mettre le focus sur le container suivant, essayer de mettre à mark_off les autres options des containers suivant, et sans résultats. Il s'agit bien d'un bug |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Annotation de photos numériques Dim 21 Fév 2010 - 10:22 | |
| Bonjour,
j'ai fait des essais avec ton programme, car je n'avais aucun problème avec les "mark_on". Le "bug" vient des lignes "on_click" des options. Si tu les enlèves, les "mark_on" marchent bien. Il doit y avoir un problème à ce niveau dans Panoramic. Peut-être une piste à suivre pour Jack...
Note: j'utilise la version V0.9.17 de l'éditeur (la plus récente).
Cordialement Klaus | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Annotation de photos numériques Dim 21 Fév 2010 - 10:27 | |
| Merci Klaus pour ta réponse, et d'avoir essayé, et ta remarque... avisée. Peut-être faut-il d'abord décrire toutes les options, les mark_on, et regrouper après coup tous les On_Click avant le end Enfin, c'est une piste de recherche intéressante. J'essaierai ça, merci encore à toi. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Annotation de photos numériques Dim 21 Fév 2010 - 10:42 | |
| Effectivement, il y a de ça: si tu groupes tous les "On_Click" APRES les "Mark_On", ça marche sans problème ! Il y a donc bien on bug, mais on peut le contourner ! Da,s mon programme exemple avec les composants d'un ménu, j'ai rajouté un bouton qui lance une routine avec le code suivant: - Code:
-
for i%=1 to 4 if checked(i%+10)=1 then xe$ = caption$(i%+10) if checked(i%+20)=1 then xp$ = caption$(i%+20) if checked(i%+30)=1 then xl$ = caption$(i%+30) if checked(i%+40)=1 then xd$ = caption$(i%+40) next i% message xe$ + ", " + xp$ + " + " + xl$ + ", " + xd$
et je récupère bien les résultats des options cochées. C'est peut-être une autre solution pour éviter les "On_Click"... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Annotation de photos numériques Dim 21 Fév 2010 - 13:21 | |
| Cette discussion est à rapprochée du topic lancé par JL35 "Mark_on dans Container_option". A mon avis, il ne faut pas utiliser ON_CLICK avec les OPTION(s). Il faut tourner le code différement. On pourrait peut-être utiliser ON_CLICK sur le CONTAINER et non pas sur l'OPTION pour diriger vers un LABEL. Je n'ai pas essayer, je vais le faire aujourd'hui peut-être ou alors demain et si je peux pas le faire moi-même.. Té! je verrais avec mon voisin... (J'ai perdu la mélodie). A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Annotation de photos numériques Dim 21 Fév 2010 - 13:44 | |
| On peut très bien faire "On_Click" sur les options d'un Container_option, à condition de les placer APRES tous les "Mark_On". Cela marche parfaitement ainsi; on a bien sûr tendance à regouper toutes les instructions constituant un objet au même endroit, mais dans ce cas précis, il faut déplacer les "Mark_On", le mieux estde les placer juste avant "End". Tout marche bien alors, mais je pense qu'avec ce diagnostic, Jack trouvera où ça cloche... Regarde mon petit programme de démonstration. Les "On_Click" marchent, et les "Mark_On" aussi: - Code:
-
label menu, click10,click20,click30,click40
dim i%,xe$,xp$,xl$,xd$
width 0,420 : height 0,700
container_option 10 top 10,10 : left 10,10:width 10,180 : height 10,180 : caption 10,"Hors d'oeuvres"
container_option 20 top 20,210 : left 20,10 : width 20,180 : height 20,180 : caption 20,"Plats"
container_option 30 top 30,210 : left 30,220 : width 30,180 : height 30,180 : caption 30,"Légumes"
container_option 40 top 40,410 : left 40,10 : width 40,180 : height 40,180 : caption 40,"Desserts"
option 11 parent 11,10 : caption 11,"Saumon fumé" : top 11,20 : left 11,20 option 12 parent 12,10 : caption 12,"Crudités" : top 12,40 : left 12,20 option 13 parent 13,10 : caption 13,"Jambon de pays" : top 13,60 : left 13,20 option 14 parent 14,10 : caption 14,"Crevettes roses" : top 14,80 : left 14,20
option 21 parent 21,20 : caption 21,"Boeuf Bourguignon" : top 21,20 : left 21,20 option 22 parent 22,20 : caption 22,"Poulet Basquaise" : top 22,40 : left 22,20 option 23 parent 23,20 : caption 23,"Canard rôti" : top 23,60 : left 23,20 option 24 parent 24,20 : caption 24,"Filet de Perche" : top 24,80 : left 24,20
option 31 parent 31,30 : caption 31,"Haricots verts" : top 31,20 : left 31,20 option 32 parent 32,30 : caption 32,"Frites" : top 32,40 : left 32,20 option 33 parent 33,30 : caption 33,"Gratin Dauphinois" : top 33,60 : left 33,20 option 34 parent 34,30 : caption 34,"Brocolis" : top 34,80 : left 34,20
option 41 parent 41,40 : caption 41,"Mousse Chocolat" : top 41,20 : left 41,20 option 42 parent 42,40 : caption 42,"Tarte aux abricots" : top 42,40 : left 42,20 option 43 parent 43,40 : caption 43,"Plateau de fruits" : top 43,60 : left 43,20 option 44 parent 44,40 : caption 44,"Coupe glacée" : top 44,80 : left 44,20
button 50 : caption 50,"Ménu" : top 50,610 : left 50,20 : on_click 50,menu
mark_on 13 mark_on 22 mark_on 31 mark_on 44
' ici, le reste du code du programme principal
' ici, les On_Click
on_click 11,click10 on_click 12,click10 on_click 13,click10 on_click 14,click10
on_click 21,click20 on_click 22,click20 on_click 23,click20 on_click 24,click20
on_click 31,click30 on_click 32,click30 on_click 33,click30 on_click 34,click30
on_click 41,click40 on_click 42,click40 on_click 43,click40 on_click 44,click40
end
menu: for i%=1 to 4 if checked(i%+10)=1 then xe$ = caption$(i%+10) if checked(i%+20)=1 then xp$ = caption$(i%+20) if checked(i%+30)=1 then xl$ = caption$(i%+30) if checked(i%+40)=1 then xd$ = caption$(i%+40) next i% message xe$ + ", " + xp$ + " + " + xl$ + ", " + xd$ return
click10: for i%=1 to 4 if checked(i%+10)=1 then message "Entrée: " + caption$(i%+10) next i% return
click20: for i%=1 to 4 if checked(i%+20)=1 then message "Plat: " + caption$(i%+20) next i% return
click30: for i%=1 to 4 if checked(i%+30)=1 then message "Légume: " + caption$(i%+30) next i% return
click40: for i%=1 to 4 if checked(i%+40)=1 then message "Dessert: " + caption$(i%+40) next i% return
Dernière édition par Klaus le Dim 21 Fév 2010 - 14:03, édité 1 fois | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Annotation de photos numériques Dim 21 Fév 2010 - 13:55 | |
| Effectivement, muni de vos excellentes remarques, j'ai un peu modifié le code, en mettant dans l'ordre: - définition des options - Les Mark_On(s) - Les On_Click Et là ça marche très bien ! j'avais trouvé plus logique (plus clair) de regrouper avec chaque option tout ce qui la concernait (définition, Mark, On_Click) mais bon, ça ne marche pas comme ça. Mais l'essentiel est d'avoir une solution de rechange.
Merci à tous les deux pour vos bons conseils.
PS: je rectifie le code initial en haut du topic. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Annotation de photos numériques Dim 21 Fév 2010 - 16:02 | |
| Juste une petite reflexion à l'encontre de Klauss, tu aurais pus prendre CHECK à la pace de OTION pour le déssert, car moi je veux ET de la mousse au chocolat ET la tarte aux abricots. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Annotation de photos numériques Dim 21 Fév 2010 - 16:22 | |
| Et après, une bonne sieste. C'est pas comme ça que tu vas me trouver mes erreurs ! | |
| | | Contenu sponsorisé
| Sujet: Re: Annotation de photos numériques | |
| |
| | | | Annotation de photos numériques | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |