IDL_BASE64

The IDL_BASE64 function uses MIME Base64 encoding to convert a byte array into a Base64 encoded scalar string, or to convert a Base64-encoded scalar string into a byte array.

The MIME Base64 encoding uses 64 characters, consisting of “A-Z”, “a-z”, “0-9”, “+”, and “/”. Every 3 bytes of the original array are converted into 4 characters. If the length of the final encoded string is not a multiple of 4, then it is padded with “=” characters. The 64 characters used in Base64 encoding were chosen because they are common to most character encodings, are printable, and are unlikely to be modified in transit through systems such as electronic mail.

This routine is written in the IDL language. Its source code can be found in the file idl_base64.pro in the lib subdirectory of the IDL distribution.

Examples

This example reads a JPEG image into a byte array, converts the array to a MIME Base64-encoded string, then converts the string back into a byte array and displays the two images side by side.

; Read an image into a byte array

READ_JPEG, FILEPATH('rose.jpg', $

   SUBDIRECTORY=['examples', 'data']), rose

; View the size of the byte array

HELP, rose

; Save the dimensions of the byte array

rs = SIZE(rose)

rose_dims = [rs[1], rs[2], rs[3]]

; Encode the byte array as a scalar string

rose_encoded = IDL_BASE64(rose)

; View information about the scalar string

HELP, rose_encoded

PRINT, 'rose_encoded is ' + STRING(STRLEN(rose_encoded)) $

   +' characters long'

;Decode the scalar string

rose2 = IDL_BASE64(rose_encoded)

; Note that the returned value is a byte vector

HELP, rose2

; Reform the byte vector into an array of the

; same size as the original array

rose3 = REFORM(rose2, rose_dims)

HELP, rose3

; Display the original and reconstituted images

WINDOW, XSIZE=rose_dims[1]*2, YSIZE=rose_dims[2], $

   TITLE='Original and Reconstituted images', /FREE

TV, rose, 0, /TRUE

TV, rose3, 1, /TRUE

This example converts an “ordinary” string into a Base64-encoded string:

; Use any ordinary string, which can contain 'unsafe'

; characters like spaces or exclamation marks:

orig_string = 'IDL is fun!'

; Convert the string to a byte array

orig_bytes = BYTE(orig_string)

; Note that the original string and byte array are the same size

HELP, orig_string

PRINT, STRLEN(orig_string)

HELP, orig_bytes

; Convert the byte array into an encoded string

new_string = IDL_BASE64(orig_bytes)

 

; Notice that the encoded string is larger than

; the original, and contains only 'safe' characters

PRINT, new_string

; To recover the original string:

PRINT, STRING(IDL_BASE64(new_string))

Syntax

Result = IDL_BASE64(Input)

Return Value

If Input is a byte array, Result is a scalar string containing the Base64 encoded data.

If Input is a Base64 encoded string, Result is a byte vector containing the decoded data.

Arguments

Input

Input must be either an array of type byte or a Base64 encoded scalar string.

Keywords

None

Version History

7.1

Introduced