IMAGEMAGICK Utilisation

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

IMAGEMAGICK Utilisation

Message par Zorro »

faire des Gif Animés (creation-sauvegarde )en Pb


le sujet reviens souvent, a propos des divers format de graphisme ,de rotations, de transformation
de modification de Lumiere, contraste,couleurs etc ... en Purebasic

en fait , il existe un moyen assez simple pour disposer de tout ça a moindre Frais :)

c'est ImageMagick !!! (d'ailleurs je ne connais pas la licence exacte, mais peut etre que Fred pourrai inclure des fonctions dédiées , comme il l'a fait pour Scintilla (juste une idée au passage )
voir la licence ici : https://www.imagemagick.org/script/license.php
[reedit] @Fred , il me semble que la license est tres permissive, a l'image de Scintilla , je pense que tu pourrai peut etre penser a l'inclure dans PureBasic non ?



donc voici comment se creer de toute piece un Gif Animé en utilisant Purebasic et ImageMagick :)

pour se faire je vais utilisé les images au format Bmp de Falsam suivantes :

Image Image Image Image

mettez les dans le dossier de l'application que vous allez compiler avec le code suivant :

mais tout d'abords

Telecharger imagemagick ici:
http://www.imagemagick.org/script/download.php#windows (pour Windows )
ATTENTION A BIEN RECUPERER "ImageMagick-7.0.5-10-portable-Q16-x64.zip"
pas une autre version , j'ai eu des problèmes de fonctionnement avec les autres versions :)



installez le dans un coin de votre disque dur , soit C:\ soit comme pour moi D:\ImageMagick-7.0.5-10-portable-Q16-x64\
j'ai juste changé la lettre du lecteur , le chemin est proposé par l'installateur


pour faire du Gif Animé avec ImageMagick : voici le code en Pb
notez que je converti des images Bmp ci dessus , situées dans mon dossier "D:\Dobro\PureBasic\dobro\ExemplePerso\Graphisme\imagemagik_exemple_Purebasic\images_frame\"
et que je met le résultat généré du Gif Animé au meme endroit

par contre avec RunPrg , je lance imageMagick qui lui est situé dans son repertoire : "D:\ImageMagick-7.0.5-10-portable-Q16-x64\magick.exe" (pour moi)

la ligne de commande se compose de l'action a effectuer :"convert" , puis des paramètres pour la conversion (une animation faites d'images séparées par un delay de 200 millisecondes , en boucle )
puis viens ensuite l'emplacement des images a convertir, et l'emplacement du résultat GIF animé :)

ce qui apres le code (qui vous renvera un code 0 si tout va bien ) donnera ceci : Image

voici le code :

Code : Tout sélectionner

;***********************************************
;Titre  :*exemple_make_gif_animé
;Auteur  : 
;Date  :10/06/2017
;Heure  :10:51:51
;Version Purebasic :  PureBasic 5.60 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : telecharger ImageMagick
;***********************************************

;Telecharger imagemagick ici: 
; http://www.imagemagick.org/script/download.php#windows
; installez le dans un coin de votre disque dur , soit C:\  soit comme pour moi D:\ImageMagick-7.0.5-Q1\
; j'ai juste changé la lettre du lecteur

; pour faire du Gif Animé avec ImageMagick : voici le code en Pb 
; notez que je converti des images Bmp situées dans le dossier "D:\Dobro\PureBasic\dobro\ExemplePerso\Graphisme\imagemagik_exemple_Purebasic\images_frame\"
; et que je met le résultat du Gif Animé au meme endroit
; par contre je lance imageMagick qui lui est situé dans son repertoire : "D:\ImageMagick-7.0.5-10-portable-Q16-x64\magick.exe"
; la ligne de commande se compose de l'action a effectuer :"convert" , puis des parametres pour la convertion  (une animation faites d'images séparées par un delay de 200 millisecondes , en boucle )
; puis viens ensuite l'emplacement des images a convertir, et l'emplacement  du résultat GIF animé :)

Declare convertion_gif_anime(dossier.s)

;; convert -delay 20 -loop 0 *.Bmp animation.gif
dossier.s=PathRequester("choisir le dossier des images BMP a convertir","D:\")
Convertion_Gif_anime(dossier.s)	







;-Zone Procedures
Procedure Convertion_Gif_anime(dossier.s)		
		Path_Imagemagick.s="D:\ImageMagick-7.0.5-10-portable-Q16-x64\magick.exe"
		image$+"*.bmp"
		param2$="convert -delay 20 -dispose Background -loop 0"
		Parametre$ = param2$+" "+dossier.s+ image$+" "+dossier.s+"Gif_anime.gif" ; ici on creer l'animation
		Prg= RunProgram(Path_Imagemagick.s, Parametre$, "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Error|#PB_Program_Hide)
		Sortie$ = ""
		Delay(50)
		If Prg
				While ProgramRunning(Prg)
						While AvailableProgramOutput(Prg)
								Sortie$ + ReadProgramString(Prg)
						Wend
						Sortie$ + ReadProgramError(Prg)
				Wend
				While AvailableProgramOutput(Prg)
						Sortie$ + ReadProgramString(Prg)
				Wend
				If Sortie$ <> ""
						Sortie$ + Chr(13)
				EndIf
				Sortie$ + ReadProgramError(Prg) ; TRY THIS IF IT DOESNT WORK
				Sortie$ + Chr(13) + Chr(13)
				Sortie$ + "Code de retour : " + Str(ProgramExitCode(Prg))
				CloseProgram(Prg) ; Ferme la connection vers le programme
		EndIf
		MessageRequester("Sortie", Sortie$)
EndProcedure
; 


notez bien que imageMagick est capable de plein plein de chose a propos du graphisme
de la conversion de format en tout genre, en passant par des modifications de contraste, lumiere ,couleur , des comparaison entre image, rotation transformation en tout genre etc ...
c'est énorme ! et tres rapide :)
quelques exemples de ce qu'on peut faire avec , ici : http://www.imagemagick.org/Usage/

Fred si tu pouvais nous ajouter ça dans Purebasic (voir la licence ??? ) ce serai vraiment Top :)


a Tous :
si vous codez une conversions utilisant ImageMagick comme je le fait ici , n’hésitez pas a poster votre code dans ce topic, histoire de pas éparpiller :)
Dernière modification par Zorro le mar. 09/janv./2018 22:41, modifié 4 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: IMAGEMAGICK UTILISATION

Message par Zorro »

voici un exemple plus complet de ce qu'on peut faire avec ImageMagick : )
vous décommentez l'exemple qui vous intéresse :)

Code : Tout sélectionner


;***********************************************
;Titre  :*exemple_utilisation_imageMagick
;Auteur  : Zorro
;Date  :10/06/2017
;Heure  :19:04:22
;Version Purebasic :  PureBasic 5.60 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : telecharger ImageMagick
;***********************************************


;Telecharger imagemagick ici: 
; http://www.imagemagick.org/script/download.php#windows
; installez le dans un coin de votre disque dur , soit C:\  soit comme pour moi D:\ImageMagick-7.0.5-Q1\
; j'ai juste changé la lettre du lecteur

; pour faire du Gif Animé avec ImageMagick : voici le code en Pb 
; notez que je converti des images Bmp situées dans le dossier "D:\Dobro\PureBasic\dobro\ExemplePerso\Graphisme\imagemagik_exemple_Purebasic\images_frame\"
; et que je met le résultat du Gif Animé au meme endroit
; par contre je lance imageMagick qui lui est situé dans son repertoire : "D:\ImageMagick-7.0.5-Q16\magick.exe"
; la ligne de commande se compose de l'action a effectuer :"convert" , puis des parametres pour la convertion  (une animation faites d'images séparées par un delay de 200 millisecondes , en boucle )
; puis viens ensuite l'emplacement des images a convertir, et l'emplacement  du résultat GIF animé :)

Declare traitement(param1.s,file_entre.s,file_sortie.s)



Global Path_Imagemagick.s="D:\ImageMagick-7.0.5-10-portable-Q16-x64\magick.exe"			


;dossier.s=PathRequester("choisir le dossier des images BMP a convertir","D:\")
;Convertion_Gif_anime(dossier.s)		

;-Gif Animé
; ******************** Faire un Gif Animé **************************************
;File_entre.s=PathRequester("montrer l'endroit ou se trouve les images bmp a convertir",GetCurrentDirectory())
;File_entre.s=File_entre.s+"*.bmp"
;File_sortie.s=GetPathPart(File_entre.s)+"Gif_Anime.gif"
;Traitement("convert -delay 20 -dispose Background -loop 0" ,File_entre.s,File_sortie.s )  ; Faire un Gif Animé a partir de plusieurs images
; ***************************************************************************

;-resize image Proportionel
; ********************* Changer la taille d'une image en largeur 800 en respectant la proportion  (en creant un clone ) ***
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a resizer",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"+".jpg"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s
;Traitement("convert -resize 800x ",File_entre.s,File_sortie.s) ; resize avec 800 de large , sans toucher a la proportion
; ******************************************************************************************

;-resize image
; *************************Changer la taille d'une image en 800x600 ***************************************
; File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a resizer",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"+".jpg"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s
;Traitement("convert -resize 800x600 ",File_entre.s,File_sortie.s) ; resize avec 800 de large , 600 de haut
; *****************************************************************************************************

;-resize par pourcentage
; *************************Changer la taille d'une image en 800x600 ***************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a resizer",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"+".jpg"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s
;Traitement("convert -resize 50% ",File_entre.s,File_sortie.s) ; resize a 50% de l'original
; *****************************************************************************************************

;-conversion de format
; *************************Convertir un Jpg en Png ***************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a convertir",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert  ",File_entre.s,File_sortie.s) ; conver ti un format dans un autre
; *****************************************************************************************************

;-image to icone
; *************************Faire une icone a partir d'une image ***************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a iconifier",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"+".ico"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s
;Traitement("convert -colors 256 -resize 32x32 ",File_entre.s,File_sortie.s) ; resize a 50% de l'original
; *****************************************************************************************************

;image niveau de gris
; *************************Convertir une image en niveau de gris ***************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a mettre en niveaux de gris",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"+".jpg"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s
;Traitement("convert -type Grayscale ",File_entre.s,File_sortie.s) ; resize a 50% de l'original
; *****************************************************************************************************

;-ajout Watermark
; *************************Ajout d'un watermark Simple sur image***************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a tagger",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"+".jpg"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s
;File_temp.s=GetPathPart(File_entre.s)+"WATERMARK_FILE.png"
;Traitement("convert -size 640x400 xc:none -font Arial -pointsize 124 -gravity center -draw "+chr(34)+"fill white text 1,1 'By Dobro' text 0,0 'By Dobro' fill black text -1,-1 'By Dobro' "+chr(34) ,"",File_temp.s) ; on creer d'abord une image transparente du watermark text Corp 24
;Traitement("composite -dissolve 50% -gravity center -tile "+File_temp.s ,File_entre.s,File_sortie.s) ; puis on assemble en "fondu" (dissolve 50%) l'image entré, et le watermark pour creer une image finale regroupant les deux
;;**** -tile = permet de multiplier l'affichage de l'image watermark dans l'image de sortie
;****-gravity south pour etre en bas ou bien -gravity Center , pour mettre le watermark au centre
;****-size 640x400   donne la taille de l'image Watermark ,
;**** xc:none ; dit que c'est un fond transparent
; *****************************************************************************************************

;-modifier contraste et lumiere
; *************************changer le contraste  ou la lumiere d'une image ***************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a modifier le contraste",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert  +contrast +contrast +contrast ",File_entre.s,File_sortie.s) ; conver ti un format dans un autre
; ***-contrast  augmente le contrast , le faire plusieurs fois augmente encore plus (3 fois dans l'exemple ci dessus) 
; ***+contrast diminue le contrast , le faire plusieurs fois diminue encore plus
; ***-modulate 200 augment a fond la luminosité
; ***-normalize permet un reglage automatique du contraste
; *****************************************************************************************************

;-rotation d'image
; *************************rotation d'une image ***************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a modifier la rotation",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert  -rotate -30 ",File_entre.s,File_sortie.s) ;
; ***rotate -30 pour rotation de 30 degres a gauche , et Rotate 30 pour rotation de 30 degres a droite
; *****************************************************************************************************

;- Blur (Flou) 
; *************************Flou (Blur) sur image ***************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a Flouter",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert  -blur 4x4 ",File_entre.s,File_sortie.s) ; 
; *** -blur 0x0 a -blur 8x8   (radiusxsigma)
; *****************************************************************************************************

;- Blur Gaussian  (Flou gaussien meilleur pour les photos) 
; *************************Flou (-gaussian-blur) sur image ***************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a Flouter",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert -gaussian-blur 4x4 ",File_entre.s,File_sortie.s) ; 
; *** -gaussian-blur 0x0 a -gaussian-blur 8x8   (radiusxsigma)
; *****************************************************************************************************



;-gamma Global value entre 0.8 et 2.3
; *************************Gamma global (-Gamma valeur) sur image ***************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert -gamma 1.5 ",File_entre.s,File_sortie.s) ;
; *** -gamma value entre 0.8 et 2.3 inferieur a 1 assombri l'image
; *****************************************************************************************************

;-gamma value entre 0.8 et 2.3
; *************************Gamma par composante couleur  sur image ***************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg ",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert -channel red -gamma 1.5 ",File_entre.s,File_sortie.s) ; change le Gamma sur la composante rouge seulement
; *** -channel permet de difinir sur quel composante on travail ça peut etre :Red, Green, Blue, Alpha, Cyan, Magenta, Yellow, Black, RGB, RGBA, CMYK, ou CMYKA. 
; *****************************************************************************************************

;-deformation -swirl degres
; *************************Deformation -swirl degres (tourbillon )**************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a tordre",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert -swirl 90 ",File_entre.s,File_sortie.s)
; *** -channel permet de difinir sur quel composante on travail ça peut etre :Red, Green, Blue, Alpha, Cyan, Magenta, Yellow, Black, RGB, RGBA, CMYK, ou CMYKA. 
; *****************************************************************************************************

;-deformation -wave amplitude,longueur de l'onde
; *************************Deformation -wave amplitude *************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a tordre",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert -wave 5,150 ",File_entre.s,File_sortie.s)
; ***-wave amplitude,longueur de l'onde
; *****************************************************************************************************

; -shade Ombrage d'une image en utilisant une source lumineuse distante. (Effet  NExt Cube)
; ************************* ombrage d'une image  *************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a ombrer",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert -shade 60,60 ",File_entre.s,File_sortie.s)
; *** -shade azimuth/ elevation
; *****************************************************************************************************

; -solarize pourcent  Solarisation  d'une image 
; *************************  Solarisation  d'une image  *************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a ombrer",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert -solarize 30% -gamma 1.5 ",File_entre.s,File_sortie.s)
; ***  -solarize pourcentage
; *****************************************************************************************************

;-sepia tone tons sepia pour une photo
; *************************  ons sepia pour une photo  *************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a sepia-iser",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert -sepia-tone 100% ",File_entre.s,File_sortie.s)
; *** -sepia pourcentage
; *****************************************************************************************************

;-Posterize  (reduction du nombre de niveau de couleur dans l'image )
; ************************* reduction du nombre de niveau de couleur  *************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a traiter",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert -posterize 2 ",File_entre.s,File_sortie.s) ; ici chaque couleur de l'image aura 2 niveaux (0 ou 1)
; *** -sepia pourcentage
; *****************************************************************************************************

;-negate  (Negatif de l'image )
; ************************* Negatif de l'image *************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg negativer",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert -negate ",File_entre.s,File_sortie.s) ;negatif de l'image
; *** -sepia 
; *****************************************************************************************************

;-normalize (Transforme une image pour couvrir la gamme complète des valeurs de couleur. )
; *************************Normalize l'image *************************************
;File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg negativer",GetCurrentDirectory(),"*.jpg",1)
;nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
;File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
;Traitement("convert -normalize ",File_entre.s,File_sortie.s) ;negatif de l'image
; *** -normalize
; *****************************************************************************************************

;-color (chnage le nombre de couleurs utilisé dans l'image )
; ************************* Color *************************************
File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg modifier",GetCurrentDirectory(),"*.jpg",1)
nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"
File_sortie.s=GetPathPart(File_entre.s)+nom.s+".png"
Traitement("convert -colors 16 ",File_entre.s,File_sortie.s) ;ici on refait l'image avec seulement 16 couleurs !!! 
; *** -normalize
; *****************************************************************************************************








;-display resultat
; *************************display l'image ***************************************
 RunProgram(File_sortie.s, "", "")

; *****************************************************************************************************





;-Zone Procedures

Procedure Traitement(param1.s,File_entre.s,File_sortie.s)	   
		; By Zorro	
		Parametre.s =param1.s+" "+File_entre.s+" "+File_sortie.s; ici on creer l'animation
		;debug Parametre.s
		Prg= RunProgram(Path_Imagemagick.s, Parametre.s, "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Error|#PB_Program_Hide)
		Sortie$ = ""
		Delay(50)
		If Prg
				While ProgramRunning(Prg)
						While AvailableProgramOutput(Prg)
								Sortie$ + ReadProgramString(Prg)
						Wend
						Sortie$ + ReadProgramError(Prg)
				Wend
				While AvailableProgramOutput(Prg)
						Sortie$ + ReadProgramString(Prg)
				Wend
				If Sortie$ <> ""
						Sortie$ + Chr(13)
				EndIf
				Sortie$ + ReadProgramError(Prg) ; 
				Sortie$ + Chr(13) + Chr(13)
				Sortie$ + "Code de retour : " + Str(ProgramExitCode(Prg))
				CloseProgram(Prg) ; Ferme la connection vers le programme
		EndIf
		If findstring(Sortie$,"Code de retour : 0")=0
				MessageRequester("Sortie", Sortie$)
		Endif
EndProcedure
; 


bon vous aurez compris qu'on lance ImageMagick avec un parametre

qui est de la forme :

Action Image_source Image_resultat

voici quelques parametres intéressants :

http://www.quennec.fr/trucs-astuces/sys ... magemagick
Dernière modification par Zorro le mar. 09/janv./2018 22:42, modifié 9 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: IMAGEMAGICK UTILISATION

Message par Shadow »

Ok bon bha t'as plus qu'a nous faire un super tuto pour savoir comment on utilise se truc qui à l'air bien
Merci.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: IMAGEMAGICK UTILISATION

Message par Zorro »

2em code mis a jour

j'ai unifié l'appel , de sorte qu'il soit a peut pres identique

et j'ai mis plusieurs exemples a décommentez a volonté , c'est assez simple d'utilisation , et permet une petite librairie
c'est assez simple de passer une image en niveau de gris, ou de la transformer en icone , la retailler etc ....
on peut faire bien plus , il faudrai que je m'y plonge un peut plus , mais c'est tres puissant,
pourrai meme servir a un logiciel de retouche maison ..
il n'y a pas a dire, si PureBasic proposait ce type de traitement en natif, ce serai vraiment cool :)
je vais faire mon KCC .... parceque la pour le coup avec imageMagik , le gif c'est trop simple :)

exemple ajouté :

Faire un Gif Animé
resize image proportionel
resize image simple
resize image par pourcentage
conversion de format
Image to icone
Dernière modification par Zorro le dim. 11/juin/2017 15:29, modifié 1 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: IMAGEMAGICK Utilisation

Message par Shadow »

Merci beaucoup zorro, pourquoi ne pas faire un tuto ?
Sinon tu pourrais faires d'autre exemples, comme changer la teinte, saturation, luminosité d'une couleur, etc. ?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: IMAGEMAGICK Utilisation

Message par Kwai chang caine »

Merci pour la combine 8)
J'étais tombé sur lui lorsque je cherchais à faire un comparateur d'image, mais j'avais pas vu tout ce qu'il pouvait faire :wink:
C'est apparemment comme OPENCV, un truc utilitaire de dingue en lib ou exe 8)

Bien que ce soit toujours intéressant d'inclure ce type de super extension, c'est un EXE, et comme tu l'as dit, y'a juste à envoyer des paramètres pour qu'il fasse le boulot

Par rapport à Scintilla qui lui est en DLL, et est vraiment pas si facile à mettre en oeuvre, puisque SROD a créé GoScintilla pour nous simplifier la vie.
En fin de compte, bien que ta demande puisse être justifiée, je sais pas si FRED verra l’intérêt de wrapper une simple instruction de Stdin/out, alors que comme tu l'as si bien démontré un "simple" runprogram avec le paramètre qui va bien, fait très bien l'affaire
Enfin je dit ça..je dit rien :wink:

En tout cas, encore merci de ta démonstration et ton partage, prouvant la simplicité de commande d'un aussi puissant utilitaire 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: IMAGEMAGICK Utilisation

Message par Zorro »

la encore c'est une simple question de licence , et ça se discute avec l'auteur ...

ImageMagick est distribué avec le source ...
donc l'inclusion des fonctions imageMagick dans Purebasic, pourrai eventuellement se faire
par contre, peut etre en retour une contribution ....

perso , si Purebasic pouvait devenir "PureBasic_XL" en ayant des apports comme
une librairie incluse type ImageMagick , synthèses vocal, reconnaissance vocal , librairie pour le son , la musique, la realité virtuel , acces Simple au API (sans prise de tete avec les imports)
(et d'autres apport du meme type futur) , look des gadgets , etc ....
je serai pret a lâcher 300 euros de plus pour cette version de Purebasic_XL ..

et pourtant, je n'ai pas l'utilité d'un tel langage informatique, mais juste pour la contribution , et la possibilité
de pouvoir faire, sans prise de tete !

Fred a réussi a nous refaire l'equivalent du GFA BAsic en plus simple meme , mais malheuresement, en l'etat, je trouve qu'on est pas mal bloqué
par des "bétises" , décourageantes .... si nous pouvions programmer aussi facilement les interfaces USB,Camera,DVDROM ,qu'on le fait actuellement avec le Screen
ce serai vraiment cool
certes ça représente beaucoup de travail , et tout travail mérite salaire , c'est pourquoi une nouvelle version musclé de Purebasic
mériterai un nouvel achat de licence ... (mais pas une licence comme SpiderBasic par exemple :mrgreen: ... j'aime pas me sentir prisonnier d'un system )
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: IMAGEMAGICK Utilisation

Message par Shadow »

Oui, on serais peut être tous prêt, ceux qui adore PB à mettre plus mais pas sur que ça suffise !
Me dérangerais pas de mettre 300, 350€ dans BP mais faut que ça eu veille le coups !

Là bien qu'il soit très bon, avec pleins de possibilité, non, ça m’intéresserais pas...
Mais déjà Fred pourrais peut être, je sais pas , faire un petit quelque chose qui sorte de l'ordinaire
et créer une nouvelles version de PB, bref ya que lui qui peut faire quelque chose sur ça.

Et moi non plus pas intéresser de claquer tous les ans X€, autant payer une fois et basta.

Ont aime tous PB et ont serais prêt à donnée un peut plus, déjà histoire
de remercier Fred pour son énorme travail, même si la version en soit
nous intéresse peut être pas trop...

Déjà niveau jeu 2D, peut être 3D, se serait peut être intéressant d'inclure se que sait faire
APP Game Kit ou un truc du genre, simple idée.

Puis à mon avis, peut être qu'il devrais fusionnée, du moins
à l'avenir (Car peut être pas utile maintenant) PB et SB car les deux se ressemble tellement !

Faut voir l'avancer qu'à eu PB, c'est quand même pas rien :)
Ya que Fred qui peut faire quelque chose...

Alors oui ont peut aussi lui faire des don mais c'est pas pareil je pense...
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: IMAGEMAGICK Utilisation

Message par Zorro »

modification du 2em code
ajout d'un Run Prg qui va directement ouvrir le résultat obtenu...(histoire de voir )

pour rappel je ne touche jamais a vos images d'origines , vous pouvez sans crainte utiliser l'une de vos photos
je travaille sur la photo, puis je creer une image clone....avec l'extension "_modif" ajouté dans le nom ....
l'image de sortie est generée au meme endroit que l'image d'entrée

en image d'entré choisissez un *.Jpg ... pour tester

exemples ajouté
Faire un Gif Animé
resize image proportionel
resize image simple
resize image par pourcentage
conversion de format (jpg en png ... mais il suffit de modifier les extensions :) )
Image to icone


Ajouts
Creation d'un Watermark
modification de contrast /luminosité
Rotation d'image


Blur (Flou)
Blur Gaussien
Gamma global
Gamma par composante
Deformation Swirl (tourbillon )
Deformation Wave
Sepia Tone
Posterize (diminution du niveau de chaque couleur )
Negatif image
Normalization de couleurs
Color (modification du nombre de couleurs d'un image )






bien sur ici je ne met que des exemples séparés , mais rien n'empeche de cumuler plusieurs effet
ajout watermark , rotation, augmentation de contrast ....

dans mes exemples j'utilise une image d'entrée choisi par fileRequester
mais si on veux faire du traitement par lot, il suffit de remplacer par un WildCard genre "*.Jpg" pour traiter tout les Jpg d'un dossier :)
Dernière modification par Zorro le mar. 13/juin/2017 11:46, modifié 2 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
François
Messages : 26
Inscription : mar. 14/juin/2016 12:31

Re: IMAGEMAGICK Utilisation

Message par François »

Bonjour,

Merci Zorro pour ces infos sur ImageMagik.

Un des intérêts de cet outil est qu'il peut être utilisé en ligne de commande sans l'incorporer dans un logiciel : on peut ainsi tester les fonctions sans développer une seule ligne de code et ainsi valider les paramétrages, l'enchaînement des fonctions etc ..., ce qu'on ne peut pas faire avec OpenCV (qui est par ailleurs remarquable même si je n'ai jamais réussi à l'utiliser avec PureBasic).

En plus, ImageMagik est multi-plateforme.

Apparemment, si j'ai bien compris l'info, on peut utiliser ImageMagik via une DLL :

https://imagemagick.org/script/binary-releases.php

On peut donc l'incorporer à un programme PureBasic. Il faut écrire les fichiers de déclarations et vu le nombre de fonctions existantes, c'est en soit un travail de titan mais j'ai l'impression que le forum est composé de nombreux titans que rien n'effraye !!!

Cordialement,
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: IMAGEMAGICK Utilisation

Message par Zorro »

OpenCV a deja été traité, j'ai chez moi une archive contenant pleins d'exemples Purebasic

faudrai faire une petite recherche sur le Forum Anglais
http://forums.purebasic.com/english/sea ... mit=Search

pleins d'exemples il y a :)

c'est une bonne librairie c'est clair, elle gere meme les Cameras (webcam ) :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: IMAGEMAGICK Utilisation

Message par Shadow »

Merci zorro :)
Mais ça fonctionne pas avec les PNG ont dirait :(
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: IMAGEMAGICK Utilisation

Message par Zorro »

si ! meme dans l'un des exemples qui converti un jpg en png , ça marche tres bien

que veux tu faire ?

actuellement les exemples que je donne utilisent un Jpg en image d'entrée

si tu veux travailler sur des png , il te faut modifier les lignes

Code : Tout sélectionner

File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image jpg a mettre en niveaux de gris",GetCurrentDirectory(),"*.jpg",1)
nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"+".jpg"
en

Code : Tout sélectionner

File_entre.s=openfileRequester( "montrer l'endroit ou se trouve l'image Png a mettre en niveaux de gris",GetCurrentDirectory(),"*.png",1)
nom.s=GetFilePart(File_entre.s,#PB_FileSystem_NoExtension)+"_modif"+".png"
File_entre.s = le fichier original
File_sortie.s = le fichier generé par ImageMagick

seul la creation d'un Watermark fait appel a une troisieme image ;File_temp.s =WATERMARK_FILE.png , qu'il faut laisser en Png, sinon plus de transparence
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: IMAGEMAGICK Utilisation

Message par Kwai chang caine »

Zorro a écrit :ImageMagick est distribué avec le source ...
donc l'inclusion des fonctions imageMagick dans Purebasic, pourrai eventuellement se faire
Aah ok, autant pour moi, j'avais loupé ça :oops:
Zorro a écrit :je serai pret a lâcher 300 euros de plus pour cette version de Purebasic_XL ..
Ce qui m'a toujours étonné c'est que FRED fasse toujours à la vieille méthode.
Avec le Crowdfunding, il pourrait proposer des options, et voir par avance si les clients seraient prêt à investir.
Et comme il aurait l'argent avant, il pourrait pourquoi pas embaucher quelques tronches pour l'aider dans sa tache.

Tout le monde est gagnant dans l'affaire, c'est bizarre que cela ne l'intéresse pas, c'est apparemment sans risque puisque c'est le client qui paie pour ce qu'il désire et ceci avant, donc il serait certain de ne pas se tromper de direction 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: IMAGEMAGICK Utilisation

Message par Zorro »

Kwai chang caine a écrit :
Zorro a écrit :ImageMagick est distribué avec le source ...
donc l'inclusion des fonctions imageMagick dans Purebasic, pourrai eventuellement se faire
Aah ok, autant pour moi, j'avais loupé ça :oops:
d'ailleurs cette librairie est incluse dans le langage PHP :)
voici la doc de son utilisation avec PHP
http://php.net/manual/fr/book.imagick.php
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre