I would probably change the encode procedure to something like the code below and pass JPEGQuality -1 to encode for PNG.
Code: Select all
; >> EncodeVorbisPicture procedure <<
UseJPEGImageEncoder()
UsePNGImageEncoder()
Procedure.s EncodeVorbisPicture(Image, PictureType = 3, JPEGQuality = 7)
Protected *Image, MIMEType.s, Offset, ImageDataSize, BufferSize
If JPEGQuality >= 0
; JPEG
*Image = EncodeImage(Image, #PB_ImagePlugin_JPEG, JPEGQuality)
MIMEType = "image/jpeg"
Offset = 42
Else
; PNG
*Image = EncodeImage(Image, #PB_ImagePlugin_PNG, 0, 32)
MIMEType = "image/png"
Offset = 41
EndIf
ImageDataSize = MemorySize(*Image)
BufferSize = ImageDataSize + Offset
; Allocate Buffer array and copy the encoded image to it
Protected Dim Buffer.a(BufferSize - 1)
CopyMemory(*Image, @Buffer(Offset), ImageDataSize)
FreeMemory(*Image)
; Set the additional information
Buffer(3) = PictureType
Buffer(7) = PokeS(@Buffer(8), MIMEType, -1, #PB_Ascii | #PB_String_NoZero)
Buffer(Offset-4) = ImageDataSize >> 24
Buffer(Offset-3) = ImageDataSize >> 16
Buffer(Offset-2) = ImageDataSize >> 8
Buffer(Offset-1) = ImageDataSize
; Return Base64 encoded Buffer without CRLF
ProcedureReturn ReplaceString(Base64Encoder(@Buffer(0), BufferSize), #CRLF$, "")
EndProcedure