JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Texte en gif animé Mar 19 Sep 2017 - 21:50 | |
| Le texte donné s'affiche lettre par lettre, de manière répétitive. Pour des fêtes, anniversaires, etc., à insérer par exemple dans un email. Le programme crée les images successives, mais pour l'assemblage en gif animé (je ne sais pas faire, le format est un peu complexe...) il est fait appel à une ressource externe: convert.exe, qui est un composant de ImageMagick, très puissant traitement d'images diverses (freeware, évidemment). Téléchargeable ici (version Windows): https://www.imagemagick.org/script/download.php#windows.Ci-dessous l'appel à la sub, la sub de création et d'assemblage des images elle-même, puis la sub de visualisation du résultat: - Code:
-
DIM txt$,fnt$,sz%,enr%,ctx%,cfd%,delai%,fr$
txt$ = "Bonsoir les Panoramiciens !" fnt$ = "Arial": sz% = 28: enr% = 3 ctx% = 255*65536: cfd% = 255*65536+255*256 delai% = 15: ' 15/100° de seconde entre les lettres fr$ = "C:\TEMP\Pano.gif" Text_Anim(txt$,fnt$,sz%,enr%,ctx%,cfd%,delai%,fr$) Gifanime(fr$,10,20): ' affichage du résultat END ' ============================================================================== SUB Text_Anim(txt$,fnt$,sz%,enr%,ctx%,cfd%,delai%,fr$) ' Création d'un texte animé (écriture progressive) en gif animé dans fr$ ' txt$ = texte, fnt% = police, sz% = taille, enr% = enrichissements ' (=1 gras, =2 italique, =4 souligné, combinables) ' ctx% = couleur texte, cfd% = couleur fond (de la forme R*65536+G*256+B) ' delai% = intervalle d'affichage des lettres en 100° de seconde DIM_LOCAL cv$,p%,i%,j%,rr$,rc$,r%,g%,b%,w%,x%,a$,fas$,q$,fita cv$ = "C:\PROGRA~1\IMAGEM~1.3-Q\convert.exe": ' <=== chemin de convert.exe, à ajuster rr$= "C:\TEMP\Gifani" fas$ = "Anim.gif" q$ = CHR$(34) fita = 1.15: ' facteur de correction pour italiques (sinon, troncatures) p% = 900 PICTURE p%: HIDE p%: PRINT_TARGET_IS p%: FONT_NAME p%,fnt$: FONT_SIZE p%,sz% IF BIN_AND(enr%,1) = 1 THEN FONT_BOLD p% IF BIN_AND(enr%,2) = 2 THEN FONT_ITALIC p% IF BIN_AND(enr%,4) = 4 THEN FONT_UNDERLINE p% i% = TEXT_WIDTH(txt$,p%): IF BIN_AND(enr%,2) = 2 THEN i% = i%*fita WIDTH p%,i%: HEIGHT p%,TEXT_HEIGHT(txt$,p%) 2D_TARGET_IS p% r%=INT(cfd%/65536): g%=BIN_AND(cfd%,65280)/256: b%=BIN_AND(cfd%,255) 2D_FILL_COLOR r%,g%,b% r%=INT(ctx%/65536): g%=BIN_AND(ctx%,65280)/256: b%=BIN_AND(ctx%,255) FONT_COLOR p%,r%,g%,b% IF DIR_EXISTS(rr$)=1 EXECUTE_WAIT "cmd.exe /c DEL /Q "+rr$+"*.bmp" ELSE DIR_MAKE rr$ END_IF rc$ = DIR_CURRENT$: DIR_CHANGE rr$ x% = 0 FOR i% = 1 TO LEN(txt$) a$ = MID$(txt$,i%,1): w% = TEXT_WIDTH(a$,p%) IF BIN_AND(enr%,2) = 2 THEN w% = w%*fita PRINT_LOCATE x%,0: PRINT a$: x% = x%+w% FILE_SAVE p%,"Img"+RIGHT$("0"+STR$(i%),2)+".bmp" NEXT i% FOR j% = i% TO i%+4: FILE_SAVE p%,"Img"+RIGHT$("0"+STR$(j%),2)+".bmp": NEXT j% rc$ = DIR_CURRENT$: DIR_CHANGE rr$ IF FILE_EXISTS(fr$) = 1 THEN FILE_DELETE fr$ EXECUTE_WAIT "CMD.exe /C "+cv$+" -delay "+STR$(delai%)+" -loop 0 *.bmp "+fas$ IF FILE_EXISTS(fr$) = 1 THEN FILE_DELETE fr$ FILE_COPY q$+fas$+q$,q$+fr$+q$ DIR_CHANGE rc$ EXECUTE_WAIT "cmd.exe /c RD /S /Q "+rr$ 2D_TARGET_IS 0: PRINT_TARGET_IS 0: DELETE p% END_SUB ' ============================================================================== SUB Gifanime(f$,x%,y%) ' Affichage en x%,y% du gif animé f$ DIM_LOCAL fh$,v%(4),hv%,w%,h% fh$ = "Z:\Gifani.htm": ' <==== Fichier de manoeuvre, à ajuster FILEBIN_OPEN_READ 9,f$ FILEBIN_POSITION 9,6: FILEBIN_BLOCK_READ 9,4,v%(0) w% = v%(0) + 256*v%(1): h% = v%(2) + 256*v%(3): ' dimensions du gif FILEBIN_CLOSE 9 FILE_OPEN_WRITE 9,fh$ FILE_WRITELN 9,"<HTML>" FILE_WRITELN 9,"<IMG SRC="+f$ FILE_WRITELN 9,"</HTML>" FILE_CLOSE 9 hv% = 900: WHILE OBJECT_EXISTS(hv%)=1: hv% = hv%+1: END_WHILE HVIEWER hv%: TOP hv%,y%: LEFT hv%,x%: WIDTH hv%,w%+20: HEIGHT hv%,h%+20 FILE_LOAD hv%,fh$ FILE_DELETE fh$ END_SUB ' =============================================================================== et le résultat:
Dernière édition par JL35 le Jeu 21 Sep 2017 - 22:48, édité 2 fois | |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Texte en gif animé Jeu 21 Sep 2017 - 15:01 | |
| le problème c'est qu'avec l'italic, les parties les plus à droite des lettres sont tronquées ce qui ne fait pas très joli. Mais peut être que JL35 va trouver une méthode permettant de ne pas écraser cette partie | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Texte en gif animé Jeu 21 Sep 2017 - 17:49 | |
| Bonjour ami Jicehel, Tu as évidemment raison pour l'italique, j'ai remarqué également, dans ce cas les lettres se chevauchent plus ou moins et ça tronque un peu la précédente. La largeur de chaque lettre est donnée par TEXT_WIDTH, mais ce n'est pas tout à fait exact en italique. Je vais rajouter quelque chose comme 10% à la largeur donnée dans le cas italique, ça devrait suffire. Voilà, j'ai ajouté là-haut un facteur de correction (variable 'fita' dans la sub) pour l'italique, j'augmente la valeur donnée par TEXT_WIDTH de 15% (10% est un peu juste), ça dilate un peu le texte mais bon... (Et contrairement à ce que je pensais, le problème est le même avec une police à pas fixe, encore plus accentué visuellement, mais avec 15% ça suffit comme correction). Je viens également d'ajouter un temps de latence à la fin de l'affichage du texte complet, avant le réaffichage depuis le début (ligne 49, valeur arbitraire, modulable), pour que le texte complet soit lisible pendant quelques secondes Et ça donne ceci: | |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Texte en gif animé Ven 22 Sep 2017 - 8:49 | |
| Oui, après on peut toujours ajuster comme on veut maintenant pour avoir un affichage parfait. Ce genre de réglage est toujours un peu délicat, mais bon on n'écrit pas forcément tous les messages en italique non plus. En tous cas je pense que maintenant ta procédure est en effet suffisamment complète pour répondre aux besoins. Bien joué JL35. | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Texte en gif animé Ven 22 Sep 2017 - 12:29 | |
| Merci Jicehel, et en effet le code est simple, et on peut facilement modifier les paramètres pour les adapter à son goût personnel. | |
|