照片是一格格拼的,你为什么看不出来?

图像的数字表示与像素

第 10 期 · 2026-07-18 · 2026-10-11 修订

把一张照片放大,放大,再放大

你手机里存着好多照片吧?随便挑一张,用两根手指头把它往大了撑,撑到最大,再往大撑。你会看到一件怪事:照片先是变糊,再往下,糊成了一格一格的小方块,一块一种颜色,边缘齐齐整整。刚才那张清清楚楚的脸,到这里全散成了小格子。

再想想健身房门口那种大屏幕,远看是一整幅广告,走到跟前一瞧——是一颗一颗的小灯珠。这两件事其实在说同一句话:照片不是"一整片"的,它是一小格一小格拼出来的。 平时格子太小太密,你的眼睛分不出来,才以为它是连成一片的。

盯住一只眼睛放大再放大:边先还是圆圆的,最后碎成一格一格

电脑装不下"连成一片"的东西

为什么非得切成格子?我们又得钻进电脑里看看。上两次你已经摸清楚了:电脑最里面只有开关,开关拼出数字,数字再照着一张表变成字(汉字也一样,那张表厚得多,以后我们专门拆它)。到头来,电脑肚子里存的,全是一个一个数得清的数字。

可你抬头看看真实的世界——天是慢慢变蓝的,脸蛋是慢慢变红的,颜色一路滑过去,中间没有缝、也数不清有多少种。这种"连成一片、分不出一格一格"的东西,电脑根本没处下手:它只会记数字,你总不能让它记下"从这里到那里,颜色慢慢变了一点点"。

于是人们想了个特别实在的办法。既然电脑只认一个一个的数字,那就把整幅画面,切成一个一个的小格子——切得够碎,每一小格里颜色就几乎一样了,一格记一个数,电脑就接得住了。

那就把画面,切成一格一格

我们不拿复杂的照片练手,你自己来涂一张,最快懂。拿一张方格纸,圈出一小块,比如横十格、竖十格。现在你要在这一百个格子里,涂出一张小笑脸。

先来最省事的涂法:每一格,要么涂黑,要么留白,只有这两种。 涂黑的记作 1,留白的记作 0——你看,又回到开和关了。两只眼睛各涂上几格黑,嘴巴顺着弯弯的弧线一格一格涂过去,别的留白。

涂完了,你把纸举远一点看:一张笑脸,冒出来了。

刚才你做的事,说穿了就是:把一张图,变成了一百个 0 和 1。这一个一个的小方块,有个正经名字,叫像素。一张图有多少像素,就是被切成了多少格。

十乘十的方格,涂黑记 1、留白记 0,退远一看是张笑脸

顺便说一件当真的事:你刚涂的这一百个 0 和 1,不是打比方。真有一种最老实的图片文件,名字叫 PBM——文件开头只写两行说明(我是黑白图、几行几列),后面存的就是这样一串 0 和 1,原样,它也认「涂黑记 1」。这期的游戏像素显影里,你涂完一张画,就能把它装进这种文件带回家;用记事本打开看看——里面就是你涂的那串数字。

灰和彩色,也只是数字

只有纯黑纯白,笑脸有点硬。你多半想给它添点花样——脸蛋来点浅灰,嘴唇描上红。

这也不难。不过别急,这里先有一个问题要想清楚。一个格子里只有一个开关,开关只有两种状态:开或关。所以一格也只有两种样子:黑或白。浅浅的灰,夹在黑和白的中间——可开关没有"半开",一个开关,拨不出灰。

怎么办?这一步你上次就亲手玩过了。一个开关不够,就排一排开关。 还记得吗:8 个开关排成一排,能从 0 一路拼到 255——全关着是 0,全扳开正好是 255。(那个游戏还开着:0 和 1 拼数字。不信你进去把 8 个开关全扳开,看它是不是停在 255。)那会儿这排开关拼的是数字;现在,把它整排搬进格子里。

于是一个格子的颜色,改用八个开关来记。八个开关拼出一个 0 到 255 之间的数,人们再约定:0 记全黑,255 记全白,中间的数就是由深到浅的灰——数越大,越亮,从全黑到全白整整 256 级。脸蛋那一格填个 200,就是浅浅的一层灰。

你看,格子没有变出新魔法:它记东西靠的还是开关,只是从一个变成了八个。所谓"一格填一个数",拆开看,还是一串开和关。

再说颜色。这里的巧办法是:一格不填一个数,填三个——一个管红、一个管绿、一个管蓝,各说"来多少"。三个数一配,就调出一种颜色来:红绿蓝都拉满是白,都归零是黑,红多一点绿蓝少一点,就偏红。你嘴唇那一格,把管红的数调大,就红了。用开关说,就是一格里放了三排开关。

可这里藏着一个你上次就见过的老问题:凭什么数越大是越亮、不是越暗?凭什么头一个数管的是红、不是绿? 没有为什么,是人约好的——跟 ASCII 里"65 就是 A"一模一样。哪个数代表哪种颜色,两台电脑得认同一套约定,不然你发过去一张笑脸,对面收到的就是一脸乱七八糟的颜色。图片能到处传、人人看着都对,靠的还是大家约定同一张表。

一格 1 个开关只有黑白;8 个开关,从 0 到 255 一级级的灰;24 个开关,红绿蓝各 8 个

顺带看一眼真的屏幕,这三个数就更实在了。屏幕上的一个像素,其实是紧挨着的三盏小灯:红、绿、蓝各一盏(这些小灯有个学名,叫子像素)。你填的三个数,管的就是这三盏灯各亮多足——数越大,那盏越亮。三盏灯小到眼睛分不开,光混在一起,你看到的就是一种颜色。

不同的屏幕,小灯的样子还不一样:电脑显示器里,多是三根细细的竖条;不少手机屏上,是斜着排开的小菱形、小圆点;广场大屏干脆就是圆滚滚的三色灯珠。你要是好奇,拿放大镜贴着一块白色的画面看——多数屏幕里根本不装白灯,白,就是红绿蓝三盏一起全亮。(至于三种光凑在一起,为什么能变出这么多颜色,那是光的本事,不是电脑的,以后我们专门看。)

世界上第一张数字照片

你刚才涂笑脸的这套笨办法,其实就是世界上第一张数字照片诞生的办法——一点没多。

1957 年,美国有个年轻的电脑工程师,叫拉塞尔·柯什。他刚当上爸爸,跟很多爸爸一样,把三个月大的儿子沃尔登的照片带到了单位。他上班的地方叫美国国家标准局,那儿有一台美国最早的可编程电脑,名字叫 SEAC,他是少数几个能碰它的人之一。

那天他动了个念头:能不能让这台电脑,也"看"一眼这张照片?他和同事做了台机器,把儿子的照片一行一行扫进电脑,切成了一张 176 格乘 176 格的图,整张照片只有 5 厘米见方。更妙的是:那时候的机器,一格只记得住黑或白——正是你刚才涂笑脸的那一招,一格一个 0 或 1。

那想要点灰呢?他们想了个笨办法:把同一张照片,按不同的深浅标准,来回扫上好几遍,再把这几张黑白的叠到一起——叠出来的,就有了深深浅浅的灰。你待会儿看那张娃娃脸,脸上一道一道的竖条纹,就是这么叠出来的。

于是,人类第一张存进电脑的照片,就是一张方方正正、放大全是小格子的娃娃脸。后来人们叫柯什"像素之父"。你今天随手一拍就是几百万像素的高清照片,源头就是六十多年前那张一格一格的小娃娃。

1957 年第一张数字照片:柯什三个月大的儿子沃尔登,176×176 格。一格只记黑或白,脸上的灰是好几遍黑白扫描叠出来的

一张照片,藏了多少个数字?

现在你再回头看手机里那张放大会散成格子的照片,心里应该有底了:它就是一大张方格纸,每一格填着几个数字,记着那一小块是什么颜色。

那到底藏了多少个数字呢?你的笑脸才一百格,可手机拍一张,横着就有四千格、竖着三千格——一千多万个格子,每格还三个数。一张照片摊开,就是好几千万个数字排成的一长串。

到这里,数字、文字、图片,都住进电脑了。可你的手机每天还在做一件事:你按住说话,松开手,一条语音就发出去了。声音可跟前面这些都不一样:它看不见,摸不着,伸手抓一把,什么也抓不到。这样的东西,也能变成 0 和 1 吗?——那就是我们下次,要一起拆开看的事了。

延伸阅读:你手机里的 PNG、JPEG、GIF

正文到这里就讲完了。这一段,是给还想再多翻一页的你。

这期游戏里你带走的 .pbm 和 .ppm,是一家的两兄弟,也是最老实的图片格式:.pbm 管黑白(一格一个 0 或 1),.ppm 管彩色(一格三个数)——数字都原样躺在文件里,记事本都能看。可你手机里的照片,名字多半叫 PNG、JPEG,会动的表情包叫 GIF——它们存的也还是每格的颜色数字,只是各有各的心思:

下次再看到 .png、.jpg、.gif 这些后缀,你就知道:外衣不同,裹在里面的,都是你这期亲手涂过的那种数字。

署名:王叔叔