Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Give an image, get a data-uri
#!/usr/bin/env python
"""Command line script to convert a file, usually an image, into a data URI
for use on the web."""
import base64
import mimetypes
import os
import sys
class FileNotFoundError(Exception):
pass
def img_to_data(path):
"""Convert a file (specified by a path) into a data URI."""
if not os.path.exists(path):
raise FileNotFoundError
mime, _ = mimetypes.guess_type(path)
with open(path, 'rb') as fp:
data = fp.read()
data64 = u''.join(base64.encodestring(data).splitlines())
return u'data:%s;base64,%s' % (mime, data64)
def usage(argv):
print 'Usage: %s <path-to-file>' % argv[0]
if __name__ == '__main__':
try:
path = sys.argv[1]
except IndexError:
usage(sys.argv)
sys.exit(1)
try:
print img_to_data(path)
except FileNotFoundError:
print 'File not found!'
sys.exit(2)
@rik

This comment has been minimized.

Copy link

rik commented Jul 26, 2011

Thanks for this.

I use it with this command on Mac to copy the output in my clipboard:
data-uri file.img | pbpaste

@revolunet

This comment has been minimized.

Copy link

revolunet commented Aug 17, 2011

nice for server side compression

what do you think about this pure javascript version http://www.revolunet.com/static/drop.html ?

@jsocol

This comment has been minimized.

Copy link
Owner Author

jsocol commented Aug 17, 2011

@revolunet: There are a number of websites/services that will do it, I specifically wanted something that didn't make me find one of them, or open a browser :)

@benmj

This comment has been minimized.

Copy link

benmj commented May 15, 2013

This is rad. So simple yet so effective.

@OmkarKirpan

This comment has been minimized.

Copy link

OmkarKirpan commented Dec 10, 2018

Thanks a lot for this.

@jscrapy

This comment has been minimized.

Copy link

jscrapy commented Apr 1, 2019

what about SVG? this don't work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.