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 |
|
|
| Écrire un texte dans une image | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Écrire un texte dans une image Dim 15 Aoû 2010 - 18:33 | |
| Le sujet avait déjà été abordé il y a quelque temps, mais j'ai un peu revu ma copie. Comme le titre l'indique, il s'agit d'écrire un texte (commentaire, référence, date, etc) dans une photo. La particularité ici c'est de permettre d'écrire le texte avec le fond transparent (ce que ne permet pas normalement le print dans un picture). Dans ce cas, le temps de traitement est plus long, l'écriture se faisant pixel par pixel. L' image d'origine est jpg ou bmp, le résultat est bmp. Mais comme il faut de toute façon disposer de IrfanView, on peut convertir dans tous les sens. Voici le sous-programme, à intégrer n'importe où. Les variables sont locales pour une intégration plus facile, sauf évidemment les paramètres communs (paramètre d'appel et noms des sous-programmes): - Code:
-
' Text2Img écriture d'un texte dans une image jpg ou bmp ' Le résultat est un fichier bmp (à convertir au besoin). DIM param$, ini2%, ifv$ LABEL Text2Img ifv$ = "C:\Progra~1\IrfanView\i_view32.exe " ' exemple d'utilisation du sous-programme: param$ = "-o:C:\Graph\Jpg\rafale.jpg -f:Z:\Result.bmp -p:Times New Roman -s:28" param$ = param$ + " -c:8388736 -b:-1 -x:100,500 -t:Quelle rafale !" GOSUB Text2Img EXECUTE_WAIT ifv$ + "Z:\Result.bmp": ' pour voir le résultat TERMINATE END
Text2Img: ' ***** A DECLARER DANS LE PROGRAMME PRINCIPAL: ***** ' DIM param$, ini2%, ifv$ ' LABEL Text2Img ' ifv$ = "C:\Progra~1\IrfanView\i_view32.exe " ' *************************************************** ' paramètres (dans param$): ' -o:fichier origine ' -f:fichier résultat (bmp) ' -p:police de caractères ' -s:taille des caractères ' -c:couleur des caractères (entier de la forme r*256*256+g*256+b) ' -b:couleur du fond (ou -1 si fond du texte transparent) ' -x:coordonnées du texte, en pixels (forme x,y) ' -t:texte à écrire IF ini2% = 0 DIM ki%,kj%,or9$,fr9$,po9$,sz9%,ct9,cb9,xt9%,yt9%,tx9$,br9$,fpr9$,wi9%,hi9% DIM bl9%,gr9%,re9% LABEL Paramiss, Paramass, Anapar ini2% = 1 END_IF ' Analyse des paramètres (tous sont nécessaires) ki% = INSTR(param$, "-o:"): IF ki% < 1 THEN GOTO Paramiss GOSUB Anapar: or9$ = br9$ ki% = INSTR(param$, "-f:"): IF ki% < 1 THEN GOTO Paramiss GOSUB Anapar: fr9$ = br9$ ki% = INSTR(param$, "-p:"): IF ki% < 1 THEN GOTO Paramiss GOSUB Anapar: po9$ = br9$ ki% = INSTR(param$, "-s:"): IF ki% < 1 THEN GOTO Paramiss GOSUB Anapar: sz9% = VAL(br9$) ki% = INSTR(param$, "-c:"): IF ki% < 1 THEN GOTO Paramiss GOSUB Anapar: ct9 = VAL(br9$) ki% = INSTR(param$, "-b:"): IF ki% < 1 THEN GOTO Paramiss GOSUB Anapar: cb9 = VAL(br9$) ki% = INSTR(param$, "-x:"): IF ki% < 1 THEN GOTO Paramiss GOSUB Anapar: ki% = INSTR(br9$,",") xt9%=VAL(LEFT$(br9$,ki%-1)):yt9%=VAL(MID$(br9$,ki%+1,LEN(br9$)-ki%)) ki% = INSTR(param$, "-t:"): IF ki% < 1 THEN GOTO Paramiss GOSUB Anapar: tx9$ = br9$ ' dimensions de l'image... fpr9$ = "Z:\Infoimg.txt" EXECUTE_WAIT ifv$ + or9$ + " /info=" + fpr9$ FILE_OPEN_READ 9, fpr9$ REPEAT: FILE_READLN 9, br9$: UNTIL LEFT$(br9$, 5) = "Image" FILE_CLOSE 9: FILE_DELETE fpr9$ br9$ = MID$(br9$, 20, LEN(br9$)-19) ki% = INSTR(br9$, "x"): wi9% = VAL(LEFT$(br9$, ki%-2)) br9$ = MID$(br9$, ki%+2, LEN(br9$)-1) ki% = INSTR(br9$, " "): hi9% = VAL(LEFT$(br9$, ki%-1)) PICTURE 80: LEFT 80, -1900: WIDTH 80, wi9%: HEIGHT 80, hi9% FILE_LOAD 80, or9$ bl9% = BIN_AND(ct9, 255) gr9% = (BIN_AND(ct9, 255*256))/256 re9% = (BIN_AND(ct9, 255*256*256))/65536 PRINT_TARGET_IS 80: FONT_NAME 80,po9$: FONT_SIZE 80,sz9% FONT_COLOR 80,re9%,gr9%,bl9% 2D_TARGET_IS 80 IF cb9 <> -1 bl9% = BIN_AND(cb9, 255) gr9% = (BIN_AND(cb9, 255*256))/256 re9% = (BIN_AND(cb9, 255*256*256))/65536 2D_FILL_COLOR re9%,gr9%,bl9% PRINT_LOCATE xt9%,yt9%: PRINT tx9$ ELSE ' fond du texte transparent, dessin point par point PICTURE 81: TOP 81,-200: WIDTH 81, 640: COLOR 81, 1, 1, 1 PRINT_TARGET_IS 81: FONT_NAME 81,po9$: FONT_SIZE 81,sz9% FONT_COLOR 81,0,0,0: PRINT tx9$ 2D_PEN_COLOR re9%,gr9%,bl9% FOR kj% = 0 TO 100 bl9%=COLOR_PIXEL_BLUE(81,0,kj%) gr9%=COLOR_PIXEL_GREEN(81,0,kj%) re9%=COLOR_PIXEL_RED(81,0,kj%) IF (bl9%=1 AND gr9%=1 AND re9%=1) THEN EXIT_FOR: ' fin v du texte FOR ki% = 0 TO 639 bl9%=COLOR_PIXEL_BLUE(81,ki%,kj%) gr9%=COLOR_PIXEL_GREEN(81,ki%,kj%) re9%=COLOR_PIXEL_RED(81,ki%,kj%) IF (bl9%=1 AND gr9%=1 AND re9%=1) THEN EXIT_FOR: ' fin h du texte IF (bl9%<>255 AND gr9%<>255 AND re9%<>255) 2D_POINT xt9%+ki%,yt9%+kj% END_IF NEXT ki% NEXT kj% PRINT_TARGET_IS 0: DELETE 81 END_IF FILE_SAVE 80, fr9$ 2D_TARGET_IS 0: PRINT_TARGET_IS 0: DELETE 80 GOTO Paramass Paramiss: MESSAGE "Text2Img: Au moins un paramètre manquant !" Paramass: RETURN Anapar: br9$=MID$(param$, ki%+3, LEN(param$)-ki%-2) ki% = INSTR(br9$, " -") IF ki% > 0 br9$ = TRIM$(LEFT$(br9$, ki%-1)) ELSE br9$ = TRIM$(br9$) END_IF RETURN | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Écrire un texte dans une image Lun 16 Aoû 2010 - 16:43 | |
| J'aime bien l' image prise pour la démonstration... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Écrire un texte dans une image Lun 16 Aoû 2010 - 17:10 | |
| C'est vraiment par hasard et ça résume bien la situation ici. Quand même, Jean Claude, c'est tout ce que tu retiens de mon long exposé ? | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Lun 16 Aoû 2010 - 19:45 | |
| C'est une belle performance ! (quoique je n'ai pas réussi à le faire marcher, mais bon) Mais j'ai beau examiner ton code, je ne comprends pas comment tu fais ça. Est-ce que c'est Irfan-View qui fait cette transparence ? Et si oui, avec quelle fonction ? | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Écrire un texte dans une image Mar 17 Aoû 2010 - 0:18 | |
| Bizarre si ça ne marche pas chez toi... tu as bien changé les chemins de fichiers dans param$ ? et mis le bon chemin pour IrfanView ? Mais non ce n'est pas IrfanView qui fait le boulot, c'est moi ! Le principe: j'écris d'abord le texte dans un picture bidon, (picture 81) avec un fond donné (1,1,1), le texte s'écrit noir sur blanc sur ce fond, et je recopie dans l'image destinataire tous les pixels qui ne sont pas blancs, la limite de scrutation étant fixée par la couleur 1,1,1. Puis le picture 81, devenu inutile, est supprimé. Tout simplement. Comme ça, ça ne touche pas le fond de l'image, seuls les pixels 'texte' sont modifiés.
NB on s'aperçoit comme j'ai déjà dit que l'écriture noir sur blanc n'est pas vraiment noire, il y a quelques pixels de couleur par-ci par-là dans les caractères, sans doute pour que ce soit plus joli à l'oeil. Mais il suffit de regarder si c'est blanc ou non blanc. | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Écrire un texte dans une image Mer 18 Aoû 2010 - 11:10 | |
| Bonjour, Un bout de code pour ceux que ça intéresse : j'ai fait une petite fonction en Panoramic qui renvoi les dimensions d'une image au format JPG. cela evite d'utiliser IrfanView... - Code:
-
dim JPEG_dim$,JPEG_dim%(6),JPEG_Height%,JPEG_Width% label JPEG_dim
JPEG_dim$="D:\perso\RESETPLL.jpg" print JPEG_dim$ : gosub JPEG_dim if JPEG_dim%(0)=0 print " --> Largeur:";JPEG_Width%;" Hauteur:";JPEG_Height% end_if
end
JPEG_dim: FILEBIN_OPEN_READ 124,JPEG_dim$ FILEBIN_POSITION 124,4 FILEBIN_BLOCK_READ 124,2,JPEG_dim%(0) JPEG_dim%(5)=(JPEG_dim%(0)*256)+JPEG_dim%(1) FILEBIN_BLOCK_READ 124,5,JPEG_dim%(0) JPEG_dim$=chr$(JPEG_dim%(0))+chr$(JPEG_dim%(1))+chr$(JPEG_dim%(2))+chr$(JPEG_dim%(3)) if JPEG_dim$<>"JFIF" JPEG_dim%(0)=message_warning_OK("JPEG_dim: Format de fichier incorrect !") FILEBIN_CLOSE 124 return end_if JPEG_dim%(2)=255:JPEG_dim%(3)=255: JPEG_dim%(4)=2 WHILE (JPEG_dim%(2)<>255) or ((JPEG_dim%(3)<>192) and (JPEG_dim%(3)<>194)) JPEG_dim%(4) = JPEG_dim%(4) + JPEG_dim%(5) + 2 FILEBIN_POSITION 124,JPEG_dim%(4) FILEBIN_BLOCK_READ 124,2,JPEG_dim%(2) FILEBIN_BLOCK_READ 124,2,JPEG_dim%(0) :JPEG_dim%(5)=(JPEG_dim%(0)*256)+JPEG_dim%(1) END_WHILE FILEBIN_READ 124,JPEG_dim%(0) FILEBIN_BLOCK_READ 124,2,JPEG_dim%(0): JPEG_Height%=(JPEG_dim%(0)*256)+JPEG_dim%(1) FILEBIN_BLOCK_READ 124,2,JPEG_dim%(0): JPEG_Width%=(JPEG_dim%(0)*256)+JPEG_dim%(1) FILEBIN_CLOSE 124 JPEG_dim%(0)=0 RETURN
| |
| | | Contenu sponsorisé
| Sujet: Re: Écrire un texte dans une image | |
| |
| | | | Écrire un texte dans une image | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |