Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

Serve a transparent GIF from NodeJS

View transparent-gif.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// Two ways to serve transparent GIF
 
var buf = new Buffer([
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00,
0x80, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x2c,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02,
0x02, 0x44, 0x01, 0x00, 0x3b]);
 
res.send(buf, { 'Content-Type': 'image/gif' }, 200);
 
// --- OR ----
 
var buf = new Buffer(35);
buf.write("R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=", "base64");
res.send(buf, { 'Content-Type': 'image/gif' }, 200);
zimdo commented

btw. the smallest transparent gif is actually 35 pixels :)

char EMPTY_GIF[] = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0x80, 0x00,
0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x44, 0x01, 0x00, 0x3b
};

Owner

Thanks - now serves transparent GIF in 35 bytes instead of 43.

zimdo commented

:o :)

and these 35 bytes actually represent 1x1 white pixel GIF, not transparent.

To have the browser render an inline image, rather than forcing a download of the file, try the following to serve the image:

res.writeHead(200, {'Content-Type': 'image/gif' });
res.end(img, 'binary');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.