This work is all to do with Mozilla's abilities to handle data: URLs, these are fascinating and as Mozilla has progressed it's abilities to handle progressively longer data: URLs has increased. The 5th example below wasn't possible a few iterations ago!
I wrote a little script for Boxer to convert gifs to data: URLs, it follows:
/********************************************* * This macro will convert small gifs to * * BASE64 so that they might be used in data * * urls as implemented in Mozilla. * * * * Instructions: * * * * 1. Find a tiny gif image and open in Hex * * Mode in Boxer. Save the resulting file as * * a .txt file. * * * * 2. Lose all the stuff that isn't Hex * * * * 3. Run this macro. * * * * 4. Paste: "data:image/gif;base64," * * [without the quotation marks] at the * * beginning of the line of text you should * * receive. * * * * 5. Copy all and paste into the address bar * * of Mozilla. * * * * 6. If the Image doesn't work it might be * * that the image was too large; tiny gifs * * remember! * *********************************************/ macro base64(){ int a, b, len; b=LineCount; // Move to the start of the document StartOfFile; // Lose all the white space ReplaceAll(" ",""); // Move to the start of the document StartOfFile; // Make one long line of text for (a = 1; a < b; a++){ EndOfLine; Delete; } // Replace all the Hex with Binary ReplaceAll("0","0000"); ReplaceAll("1","0001"); ReplaceAll("2","0010"); ReplaceAll("3","0011"); ReplaceAll("4","0100"); ReplaceAll("5","0101"); ReplaceAll("6","0110"); ReplaceAll("7","0111"); ReplaceAll("8","1000"); ReplaceAll("9","1001"); ReplaceAll("A","1010"); ReplaceAll("B","1011"); ReplaceAll("C","1100"); ReplaceAll("D","1101"); ReplaceAll("E","1110"); ReplaceAll("F","1111"); // Move to the start of the document StartOfFile; // Split the Binary into 6 byte chunks for (a = 1; a <= LineCount; a++){ len = (LineLength(a)/6); for (b = 1; b <= len; b++){ Right; Right; Right; Right; Right; Right; Space; } } // Convert the chunks into BASE64 ReplaceAll("000000 ","A"); ReplaceAll("000001 ","B"); ReplaceAll("000010 ","C"); ReplaceAll("000011 ","D"); ReplaceAll("000100 ","E"); ReplaceAll("000101 ","F"); ReplaceAll("000110 ","G"); ReplaceAll("000111 ","H"); ReplaceAll("001000 ","I"); ReplaceAll("001001 ","J"); ReplaceAll("001010 ","K"); ReplaceAll("001011 ","L"); ReplaceAll("001100 ","M"); ReplaceAll("001101 ","N"); ReplaceAll("001110 ","O"); ReplaceAll("001111 ","P"); ReplaceAll("010000 ","Q"); ReplaceAll("010001 ","R"); ReplaceAll("010010 ","S"); ReplaceAll("010011 ","T"); ReplaceAll("010100 ","U"); ReplaceAll("010101 ","V"); ReplaceAll("010110 ","W"); ReplaceAll("010111 ","X"); ReplaceAll("011000 ","Y"); ReplaceAll("011001 ","Z"); ReplaceAll("011010 ","a"); ReplaceAll("011011 ","b"); ReplaceAll("011100 ","c"); ReplaceAll("011101 ","d"); ReplaceAll("011110 ","e"); ReplaceAll("011111 ","f"); ReplaceAll("100000 ","g"); ReplaceAll("100001 ","h"); ReplaceAll("100010 ","i"); ReplaceAll("100011 ","j"); ReplaceAll("100100 ","k"); ReplaceAll("100101 ","l"); ReplaceAll("100110 ","m"); ReplaceAll("100111 ","n"); ReplaceAll("101000 ","o"); ReplaceAll("101001 ","p"); ReplaceAll("101010 ","q"); ReplaceAll("101011 ","r"); ReplaceAll("101100 ","s"); ReplaceAll("101101 ","t"); ReplaceAll("101110 ","u"); ReplaceAll("101111 ","v"); ReplaceAll("110000 ","w"); ReplaceAll("110001 ","x"); ReplaceAll("110010 ","y"); ReplaceAll("110011 ","z"); ReplaceAll("110100 ","0"); ReplaceAll("110101 ","1"); ReplaceAll("110110 ","2"); ReplaceAll("110111 ","3"); ReplaceAll("111000 ","4"); ReplaceAll("111001 ","5"); ReplaceAll("111010 ","6"); ReplaceAll("111011 ","7"); ReplaceAll("111100 ","8"); ReplaceAll("111101 ","9"); ReplaceAll("111110 ","+"); ReplaceAll("111111 ","/"); }
Unfortunately data: URLs in Opera are limited to around 4100 characters so some examples won't work...
Another cool site is this one.
1st 2nd 3rd 4th 5th 6th 7th 8th 9thThis isn't mine but it is excellent: This thing is great. However, I think I may have gotten a little carried away...