Base64 All The Things! (Sometimes)

March 18, 2020

An extremely overlooked process for displaying fonts, images, documents, spreadsheets, etc. on the web is the use of base64 encoding. Although it may not be the most efficient (or easy) way to display and include these elements it can be a lifesaver in certain situations.

What is base64 encoding?

It might be common knowledge, but I think breaking down exactly what base64 encoding is could be very helpful to beginner web developers:

Base64 is a group of binary-to-text encoding schemes that represent binary data in an ASCII string format by translating it into a radix-64 representation.

Wikipedia

In simpler terms: it is a encoded format that can change an element like this:

<img src="/path/to/image.jpg" alt="Cool image">

into this:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABkAAAASwCAYAA...PnyMAAAAASUVORK5CYII=" alt="Cool image">

See it in action

This image is pulled in with an HTTP request
Cool image
This image is an inline base64 encoding

Should I use base64?

That completely depends on the situation. For most regular day-to-day web development – probably not. While base64 is useful, it is slightly less per-formant than directly using a source file (though, one could argue that making the extra browser request is less per-formant as well).

But that doesn’t mean there aren’t a few edge cases.

How do I encode my files?

There are a ton of freely available encoders out in the wild web, but my personal go-to is base64converter.com. Simply upload your file and convert.

Limitations

Though these limitations can be deal-breakers in certain situations, I find it extremely helpful for developers to keep base64 encoding in their back pockets for a rainy day.


Comments

  1. DKeu says:

    I love Base64 especially in combination with web fonts and a corresponding caching. On static websites this is very effective and practical.

    By the way… I also like the design of your website. Super minimal and fast.

Leave a Reply

Your email address will not be published. Required fields are marked *