Convertir un fichier/une image en Base64

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Convertir un fichier/une image en Base64

Message par Golfy »

Les fonctions sont toutes dans Purebasic mais un collègue avait besoin d'un EXE pour pouvoir intégrer des images dans un code HTML... j'ai fait ça à l'arrache (merci Dobro pour le readdata vers un buffer que j'ai trouvé dans un de tes posts)

Code : Tout sélectionner

; programme pour convertir une image (JPG, PNG, etc) ou un fichier en Base64 (pour intégration sur
; des pages web intégrées à des appliances (Bluecoat, Sonicwall, etc.)

Procedure.s codage(file$)
	If ReadFile(0, file$)  			; Si le fichier peut être lu , on continue...
		length = Lof (0)
		*buffer=AllocateMemory(length)
		r = ReadData(0,*buffer,length)
    CloseFile(0)               ; Ferme 
		Encoded$ = Space(length*3)
		Resultat = Base64Encoder(*buffer, length, @Encoded$, length*3)
		ProcedureReturn Left(Encoded$,resultat)
	Else
		ProcedureReturn ""
	EndIf
EndProcedure
Procedure afficheText(a$)
	b$=""
	s.i = Val(GetGadgetText(2))
	If s > 0
		t=1
		Repeat
			b$ = b$ + Mid(a$,t,s.i)+Chr(13)+Chr(10)
			t = t + s.i
		Until t+s.i > Len(a$)
		b$ = b$ + Right(a$,Len(a$)-t)
		SetGadgetText(3,b$)
	EndIf
EndProcedure

UseJPEGImageDecoder() 
UseJPEG2000ImageDecoder() 
UsePNGImageDecoder() 
UseTIFFImageDecoder() 
UseTGAImageDecoder() 

OpenWindow(0,10,10,600,400,"Image-2-BASE64",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ButtonGadget(1,10,5,60,18,"Fichier")
StringGadget(2,150,5,30,18,"76")
EditorGadget(3,10,30,570,350)
TextGadget(5,110,5,50,18,"largeur")
ButtonGadget(4,450,5,60,18,"Copier")

Repeat
	a = WaitWindowEvent(50)
	If a = #PB_Event_Gadget
		Select EventGadget()
		Case 1 ; bouton fichier
			file$ = OpenFileRequester("Load image","","images|*.jpg;*.png;*.gif",0)
			a$ = codage(file$)
			afficheText(a$)
		Case 2   ; 
			If Len(a$)>0 
				afficheText(a$)
			EndIf
		Case 4
			SetClipboardText(GetGadgetText(3))
		EndSelect
	EndIf
Until a = #PB_Event_CloseWindow
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/