views:

1609

answers:

16

Recently, I used my favorite image editor to make a 1x1 black pixel (which can come in handy when you want to draw solid boxes in HTML cheaply). Even though I made it a monochrome PNG, it came out to be 120 bytes! I mean, that's kind of steep. 120 bytes. For one pixel. I then converted it to a GIF, which dropped the size down to 43 bytes. Much better, but still...

Challenge

The shortest image file or program that is or generates a 1x1 black pixel. A submission may be:

  • An image file that represents a 1x1 black pixel. The format chosen must be able to represent larger images than 1x1, and cannot be ad-hoc (that is, it can't be an image format you just made up for code golf). Image files will be ranked by byte count.
  • A program that generates such an image file. Programs will be ranked by character count, as usual in code golf.

As long as an answer falls into one of these two categories, anything is fair game.

Also, for image files, please specify them in hexadecimal or escapes rather than using an external image host :-)

+24  A: 

Image file: 10 bytes, in PGM format:

P5 1 1 1\n\0

To create it, in Python: 40 characters

 open('b.pgm', 'w').write('P5 1 1 1\n\0')
tzaman
Looks like a winner for standard formats. My old drawing program from the DOS days has you beat though.
Joshua
Never heard of the format, but this will do the same thing:`perl -e 'print "P5 1 1 1\n\0"' > b.pgm`29 Characaters
Jamie Wong
+18  A: 

Unicode art format:

·

Mark Byers
Oh, I thought I spotted a dead pixel.
BalusC
Even on my phone, I see some antialiasing. This suggests that (1) you've given more than one pixel, and (2) it is not entirely black.
Paul Hanbury
cute, but that's not an image format.
Frank Farmer
Wow, two bytes, I think you're the winner :-)
Marian
I see it as a 3x3 matrix of pixels, of which only one is pure black. No way!
Agos
Ascii art format: `.` (Note that `@` is also a valid ascii art representation of 1 pixel).
Brian
+13  A: 

The PBM format is a black and white graphics format.

A binary representation of a single black pixel would take 8 bytes, and writing it to a file with C# would look like:

File.WriteAllText("p.pbm", "P4 1 1 ÿ");
joshperry
+1  A: 

XPM, 57 bytes:

/* XPM */
static char *_x_[] = {"1 1 1 1",".c #000","."}

When looking for the wikipedia article to link it I found XPM2, 26 bytes, but I could not open that with any program here.

! XPM2
1 1 1 1
. c #000
.
Marian
+36  A: 

Data URI, 83 characters

data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==
Kevin
Awesome! I this is would have to be the most *useful* answer. It can be used in place of an image file to cut down on server requests.
Joey Adams
Here is a white version. `data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAACAkwBADs=`
gradbot
And a transparent version. `data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH5BAEAAAIALAAAAAABAAEAAAICVAEAOw==`
gradbot
@Joey: That does only cut down if it's needed just once, which is probably uncommon for the usage you outlined in the question. If the image is referenced by URL it is fetched just once and then cached.
Marian
@Marian: 0 requests for a 1x1 image is still less than 1 request.
Brian
I am the `R0lGOD`
Callum Rogers
The black version is longer than it needs to be: `data:image/gif;base64,R0lGODlhAQABAJAAAAAAAAAAACwAAAAAAQABAAACAgQBADs=` is only 70 characters
Zack
An interesting side note; Google's latest redesign of their image search uses `data:image/jpg;base64` for the previews.
gradbot
+3  A: 

Python (w/ PIL) (85 chars):

from PIL import Image
i=Image.new("P",(1,1))
i.putpixel((0,0),(0))
i.save("i.gif","GIF")
Yuval A
Is it less characters to just write `import PIL`, then `PIL.Image.new`? Looks like 5 characters less, or so.
chpwn
@chpwn. Won't work because Image isn't automatically in PIL's namespace
gnibbler
+1  A: 

An old image format I used to use: 4 bytes

 01 00 00 0C

The format consists of an array of 16 bit integers (little endian):

Bit mapping:

0-10:  number of pixels to shade
10-11: control bits
12-15: VGA16 pidel color

Control bits values:

0: normal
1: end of line
3: end of file
Joshua
Can you specify the format?
Cam
Reading starting from the third line describes the entire file format. There are no magic numbers and the image dimensions are implied from the interpretation of the scanlines (the reference implementation blackened extra space if the image was jagged).
Joshua
+2  A: 

Postscript, 29 bytes. not really a "single pixel", but it was a single pixel on my preview screen.

0 0 moveto .5 0 lineto stroke
Mark Harrison
+5  A: 

bash: 31 chars

The script to download a single pixel gif from the interwebs is fewer bytes than the single pixel itself...

wget http://tinyurl.com/2w97dyo
Joey Adams
wget http://➡.ws/닝 - 19 chars :))
rochal
+8  A: 

Logo / Turtle basic, 12 bytes

PENDOWN FD 1

I can't remember if pendown can be shortened to pd or not, if so, that drops it to 7 bytes.

Donnie
yes pd is a valid alias :)although the default logo background canvas is black, so the lines are white ;)
Davy Landman
+14  A: 

WBMP, 5 bytes:

00 00 01 01 00

Can't imagine anything smaller

Agos
Caveat: .wbmp seems part of the WAP/WML abortion and is not supported format out of the box by neither popular desktop browsers (IE, Firefox, Chrome) - what's the point of using such pixel in HTML?
Nas Banov
+4  A: 

Python+PIL 68 chars

from PIL import Image
Image.fromstring("P",(1,1),"\0").save("B.gif")
gnibbler
+2  A: 

SVG, 59 characters:

<svg><rect width="1" height="1" style="fill:#000;"/></svg>

Unfortuntally, including Doctype it grows to 157...:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"&gt;
<svg><rect width="1" height="1" style="fill:#000;"/></svg>
rochal
Luckily, you can use `<!DOCTYPE html>` instead and leave out any namespaces, etc. as it's valid HTML5. I'd assume most HTML5 engines don't really care if there's a doctype or not, so your first example should be fine.
Eli Grey
+1  A: 

Rebmu: 16 chars

en'PNGmkIM![1x1]

If you want it to save to a file based on an argument you pass in, that adds three more chars to the program:

rebmu/args [wrAen'PNGmkIM![1x1]] %my-black-pixel.png

The program is shorthand for the following Rebol, parentheses added for clarity:

write a (encode 'png (make image! [1x1]))
Hostile Fork
+1  A: 

DrRacket: 23 chars

#lang slideshow
(disk 1)
Joey Adams
+1  A: 

I'm pretty late to this party, but http://www.perlmonks.org/?node_id=7974 has a more general answer than anyone's posted so far:

## tinygif
## World's Smallest Gif
## 35 bytes, 43 if transparent

use strict;
my($RED,$GREEN,$BLUE,$GHOST,$CGI);

## Adjust the colors here, from 0-255
$RED   = 255;
$GREEN = 0;
$BLUE  = 0;

## Set $GHOST to 1 for a transparent gif, 0 for normal
$GHOST = 0;

## Set $CGI to 1 if writing to a web browser, 0 if not
$CGI = 0;

$CGI && printf "Content-Length: %d\nContent-Type: image/gif\n\n", 
  $GHOST?43:35;
printf "GIF89a\1\0\1\0%c\0\0%c%c%c\0\0\0%s,\0\0\0\0\1\0\1\0\0%c%c%c\1\0;",
  144,$RED,$GREEN,$BLUE,$GHOST?pack("c8",33,249,4,5,16,0,0,0):"",2,2,4;
Zack