31 May 2013

Chance

What are the chances that we are still alive on this planet? ...

15 May 2013

Base64 image and how to save it

Almost 2 years since I put anything here. This post is as a reference if I need to convert base64 image data to an image.

I have seen the base64 encoded URI earlier and knew what it is essentially. For example:
data:image/png;base64,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

The browser does the job of displaying it seamlessly most of the time. However, today I got it as text in a email. The email client wrapped each line by = and newline character. So I got curious how to "view" the image.

I took the following steps (possibly unnecessary as base64 command can strip garbage from input*):
  1. Saved the encoded data to a text file
  2. Used sed with the following commands to strip unneeded characters (I'm nowhere a sed expert :( )
  3. ~$&> sed 's/=$//' imagedata.txt > imagedata.txt
    (remove trailing = on each line)
  4. ~$&> sed ':a;N;$!ba;s/\n//g' imagedata.txt > imagedata2.txt
    (remove newline character from each line)
  5. ~$&> base64 -d -w 0 imagedata2.txt > imagedata.png
and the file imagedata.png is easily view-able in a image viewer e.g. Geeqie.
*: see base64 man page