Sample code for 30+ languages & platforms
DataFlex

Decode Base64 Image String (GIF, JPG, etc.) and Save to File

I have an XML response that includes a base 64 encoded image string (UPS label). It's a huge string and I need to save it as a gif file on my users pc.

This example shows how to do it..

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoBd
    String x
    Handle hoXml
    String sGifBase64
    String sTemp1

    Move False To iSuccess

    Get Create (RefClass(cComChilkatBinData)) To hoBd
    If (Not(IsComObjectCreated(hoBd))) Begin
        Send CreateComObject of hoBd
    End

    // I created an extra-small GIF image for this example..
    Get ComLoadFile Of hoBd "qa_data/gif/xsmall.gif" To iSuccess
    If (iSuccess <> True) Begin
        Showln "Failed to load GIF image file."
        Procedure_Return
    End

    // Show GIF bytes as base64:
    Get ComGetEncoded Of hoBd "base64" To sTemp1
    Showln sTemp1

    // This particular GIF in base64 is this:
    // R0lGODlhBQAFAMQAAAAAAP////z8/PHx8evr6+jo6OHh4d7e3sPDw8LCwpqamo2NjWxsbGRkZFpaWk1NTUtLS0hISCwsLCQkJP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABQALAAAAAAFAAUAAAUTYCAYQUBAU1lI0TIgztE8jFImIQA7

    // Let's begin with an XML string:
    Move "<abc><def>R0lGODlhBQAFAMQAAAAAAP////z8/PHx8evr6+jo6OHh4d7e3sPDw8LCwpqamo2NjWxsbGRkZFpaWk1NTUtLS0hISCwsLCQkJP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABQALAAAAAAFAAUAAAUTYCAYQUBAU1lI0TIgztE8jFImIQA7</def></abc>" To x

    Get Create (RefClass(cComChilkatXml)) To hoXml
    If (Not(IsComObjectCreated(hoXml))) Begin
        Send CreateComObject of hoXml
    End
    Get ComLoadXml Of hoXml x To iSuccess

    // Get the base64 string:
    Get ComGetChildContent Of hoXml "def" To sGifBase64

    Showln sGifBase64

    // Load bd with the base64 decoded bytes.  
    Get ComClear Of hoBd To iSuccess
    Get ComAppendEncoded Of hoBd sGifBase64 "base64" To iSuccess

    // Save to a GIF file.
    Get ComWriteFile Of hoBd "qa_output/xsmall.gif" To iSuccess


End_Procedure