代码高尔夫:1x1黑色像素

30

最近,我使用我最喜欢的图像编辑器制作了一个1x1的黑色像素(当你想要便宜地在HTML中绘制实心矩形时,这会很有用)。虽然我将它制作成单色PNG格式,但它的大小仍达到了120字节!我的意思是,那有点太大了。120字节。只为了一个像素。然后我将它转换为GIF格式,将其大小降至43字节。好多了,但仍然...

挑战

生成或表示一个1x1的黑色像素的最短图像文件或程序。提交可以是:

  • 代表一个1x1黑色像素的图像文件。所选择的格式必须能够代表比1x1更大的图像,并且不能是临时格式(也就是说,它不能是你刚刚为代码高尔夫发明的图像格式)。图像文件将按字节计数排名。
  • 生成此类图像文件的程序。程序将按字符计数排名,与代码高尔夫中一样。

只要答案属于这两个类别之一,任何东西都可以接受。

对于图像文件,请使用十六进制或转义序列指定它们,而不要使用外部图像主机 :-)


每像素1位是否可以?在Windows上,您可以创建的最小文件大小是多少?还是在内存中? - Chris S
是的,每像素1位是可以的,但图像格式必须能够容纳更大的单色图像。我不确定您所说的最小文件大小是什么意思,但使用的磁盘空间(例如4096字节)并不重要;文件大小本身很重要。 - Joey Adams
4
我不喜欢这个问题,因为它违反了我关于“解决一个类或问题”的代码挑战要求。请参阅http://meta.stackexchange.com/questions/24242/acceptable-level-of-code-golf-questions,了解一些社区对SO上的[code-golf]的看法。 - dmckee --- ex-moderator kitten
3
对此的一个反驳是,这个问题的答案介绍了读者各种渲染格式和技术。看起来这是学习 PGM、PBM、Logo、Python Imaging Library、PostScript、SVG 和 XPM 的好地方。如果我需要编程绘制图像,现在我知道了一些好的起点。 - Joey Adams
17个回答

42

数据URI,83个字符

data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==

12
太棒了!我认为这可能是最“实用”的答案。它可以替代图像文件,减少服务器请求。 - Joey Adams
4
这是白色版本。data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAACAkwBADs= - gradbot
5
以及一个透明版本。data:image/gif;base64,R0lGODlhAQABAJEAAAAAAP///////wAAACH5BAEAAAIALAAAAAABAAEAAAICVAEAOw== - gradbot
3
如果图像仅在需要时被使用一次,那么它只会被切断一次,但在你所描述的情况下,这种使用方法可能不常见。如果图像通过URL引用,则只会获取一次并进行缓存。 - Marian
5
@Marian: 请求一个1x1像素的图像为0仍然比请求一次少。 - Brian
显示剩余4条评论

26

图片文件:10个字节,采用PGM格式

P5 1 1 1\n\0

在Python中创建它的方法:40个字符

 open('b.pgm', 'w').write('P5 1 1 1\n\0')

1
看起来标准格式是赢家。不过我的旧绘图程序在DOS时代比你强。 - Joshua
没听说过这种格式,但这个命令可以实现同样的功能: perl -e 'print "P5 1 1 1\n\0"' > b.pgm - Jamie Wong

22

8
哦,我以为我发现了一个坏像素。 - BalusC
9
即使在我的手机上,我也能看到一些抗锯齿效果。这表明(1)你已经提供了多于一个像素,并且(2)它并不完全是黑色的。 - Paul Hanbury
1
哇,两个字节,我想你是赢家 :-) - Marian
我把它看作是一个3x3像素矩阵,其中只有一个是纯黑色的。不可能! - Agos
1
Ascii艺术格式:.(请注意,@也是一个有效的ascii艺术表示形式,代表1个像素)。 - Brian

14

WBMP,5个字节:

00 00 01 01 00

难以想象有什么更小的了


2
注意:.wbmp似乎是WAP / WML的一部分,不受流行的桌面浏览器(IE,Firefox,Chrome)原生支持 - 在HTML中使用这样的像素有什么意义呢? - Nas Banov

13

PBM 格式是一种黑白图形格式。

一个黑色像素的二进制表示需要8个字节,并使用 C# 将其写入文件的方式如下:

File.WriteAllText("p.pbm", "P4 1 1 ÿ");

9

Logo / Turtle基础,12字节

PENDOWN FD 1

我记不清是否可以将pendown缩写为pd,如果可以,那么它将减少到7个字节。


4
是的,"pd"是一个有效的别名 :)虽然默认的logo背景画布是黑色,所以线条是白色的 ;) - Davy Landman

6

bash: 31个字符

从互联网下载单像素gif动画的脚本所占用的字节数比单像素本身还要少...

wget http://tinyurl.com/2w97dyo

4

Python+PIL 68 chars

from PIL import Image
Image.fromstring("P",(1,1),"\0").save("B.gif")

3
Python(带有PIL)(85个字符):
from PIL import Image
i=Image.new("P",(1,1))
i.putpixel((0,0),(0))
i.save("i.gif","GIF")

只写 import PIL,然后使用 PIL.Image.new 会更少一些字符吗?看起来可以减少5个字符左右。 - Grant Paul
2
@chpwn。不起作用,因为Image不会自动出现在PIL的命名空间中。 - John La Rooy

3

附言,29字节。虽然它在我的预览屏幕上只是一个像素,但它并不是真正的“单个像素”。

0 0 moveto .5 0 lineto stroke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接