Code: Select all
;-
;- Object: Base64 Decoding/Encoding for images.
;-
;- Usage: These functions can be use to store/restore images
;- in plain text such as in Mails, XML, Databases.
;-
;- Target: All OS, PureBasic 4.x.
;-
EnableExplicit
Procedure.s Base64EncodeFile(FileName.s) ; Encode a file to a Base64 string.
Protected FileID.l, FileSize.l, FileBuff.l, Base64Size.l, Base64Buff.s
FileID = ReadFile(#PB_Any, FileName)
If FileID
FileSize = Lof(FileID)
FileBuff = AllocateMemory(FileSize)
If FileBuff
ReadData(FileID, FileBuff, FileSize)
Base64Size = Int(1.35 * FileSize)
Base64Buff = Space(Base64Size) ; 35% bigger than the original
Base64Encoder(FileBuff, FileSize, @Base64Buff, Base64Size)
FreeMemory(FileBuff)
EndIf
CloseFile(FileID)
EndIf
ProcedureReturn Base64Buff
EndProcedure
Procedure.l Base64CatchImage(Image.l, Base64.s, flags.l = 0) ; Create a new image from a Base64 string.
Protected Base64Size.l, ImageBuff.l, ImageSize.l, result.l
Base64Size = Len(Base64)
ImageBuff = AllocateMemory(Base64Size)
If ImageBuff
ImageSize = Base64Decoder(@Base64, Base64Size, ImageBuff, Base64Size)
If ImageSize
result = CatchImage(Image, ImageBuff, ImageSize, flags)
EndIf
FreeMemory(ImageBuff)
EndIf
ProcedureReturn result
EndProcedure
DisableExplicit
Store image into a database
Code: Select all
If DatabaseUpdate(0, "INSERT INTO tbl_image (id,base64) VALUES('test.bmp','" + Base64EncodeFile("test.bmp") + "')")
; Success
EndIf
Restore image from a database
Code: Select all
If DatabaseQuery(0, "SELECT base64 FROM tbl_image WHERE id='test.bmp'")
If NextDatabaseRow(0)
If Base64CatchImage(0, GetDatabaseString(0,0))
; Success
EndIf
EndIf
EndIf