你很可能理解错了“像素”
被误会是表达者的宿命,却也不必因此就把别人都当无可救药的傻瓜或一概斥为别有用心。——王朔
无论是日常生活中的电子产品,还是在某些专业领域,我们都经常会使用像素(Pixel)这个词。但是很可惜,很多时候人们都误解了它。同样说“像素”,在不同语境下,表示的其实是不同的东西。
在很多人印象里,像素是有大小的,通常人们认为像素就是一个方块。还有些人甚至认为像素的大小是相同的。总的来说,这些观点都是错误的。我不确定这么下结论是否过于武断,因为我们似乎可以更抽象一些的看待“像素”:它是组成可显示实体的最小单位,又或者,它是软件能处理的最小的图像元素。
显示设备里的像素(物理像素)
先从这里说起,也许你认为像素是某个显示器上发出光亮的小方块。听起来也许像个玩笑,其实显示器上的像素大概率不是正方形,而是长方形,有些显示器上的发光元件甚至是椭圆形的。其实显示器上的像素点可以是任何形状,这取决于屏幕采用的技术和生产工艺。
在显示设备的语境里,像素是一个发光元件,或者说那个发光元件显示的内容,通常来说就是 RGB 中一种颜色的光。在这个语境下,准确的说,我们指的是物理像素(Physical Pixel),它确实有固定形状,固定大小。我们说 1080p 或者 2k 屏幕,都是形容物理像素的数量。但要注意,即使物理像素有固定大小,它也是因设备而异的,它并不是一个通用单位,它并不是指像素就是 n 毫米这么大。举例子来说,相同数量像素的不同屏幕大小差异可能是巨大的,比如商场里巨大的广告屏幕和家用桌面显示器。
为了更好的形容显示效果,我们一般会用 PPI(Pixel Per Inch)/DPI(Dot Per Inch)
,表示像素的密度。这两个单位是一样的,计算方法就是对角线像素数量/屏幕对角线长度
。
一般而言,像素密度越高,显示效果就越好。对于电脑或者手机来说,因为我们通常是近距离观看,所以高 PPI 的意义比较明显。但如果是巨大的广告屏幕,我们都是较远距离观看,所以一般都是低 PPI 屏幕。对于人眼来说,越近的东西看的越清楚,越远的东西越模糊,即靠的越近,人眼就越能感受的到像素的存在。
开发者眼中的像素(逻辑像素)
对于 Web 开发者来说,在 CSS 中经常会指定某个 div
的大小,例如 width: 100px
,100px
指的就是 100 物理像素吗?并不是,其实 CSS 使用的是逻辑像素(Logical Pixel),CSS 中一像素是 1/96 inch,约为 0.26mm,也就是说 CSS 的像素单位总是和物理像素有一个比例关系。可以想象,如果 CSS 使用的是物理像素,那么不同设备上,相同的 100px 其实长度是不同的,因为不同设备的物理像素大小就是不同的,这样就给网页设计带来了很大的困难。其实不止是 CSS,大部分 UI 框架使用的所谓像素单位都是指逻辑像素。
另外,除了逻辑像素 px,在程序开发中还会用到另一个单位 pt(point),其实 pt 和逻辑像素的概念类似,它也是固定长度 1/72 inch,只是一般我们用 pt 表示字体的大小。
所谓逻辑像素(px 或 pt),也常常被开发者们称为设备无关(device independent)像素,也就是说无论用户在什么显示设备上查看软件,软件上的文字或图案都是一样大的。为了实现设备无关的长度单位,浏览器或者UI框架计算了逻辑像素到物理像素的比率,渲染时总是做这个比率的转换即可。例如 1px = 1/96 inch
,某个设备是 300 ppi,那么 1px = 1/96 * 300 物理像素
。
操作系统桌面调节分辨率也是一样的原理,物理上 2k 的屏幕也可以设置成 1920x1080 分辨率。在 1920x1080 分辨率下,一个逻辑像素会用更多的物理像素来表示。
摄像头里的像素(不是像素的“像素”)
同样是数码产品,大家经常这么形容摄像头,“1800万像素高清摄像头”,这里的“像素”又是什么呢?是指用这个摄像头拍出来的照片里有 1800万个像素点吗?这种观点其实是不对的,但好像很多数码相机或手机的普通消费者都是这么认为的。
实际上1800万像素的摄像头,指的是摄像头感光元件的数量,感光元件越多,捕捉到的图像信息也就越丰富。
说“1800万像素的摄像头拍出的照片就会有1800万像素”是不对的,我们仔细再看看这句话,这句话里出现了两个“像素”。这句话令人困惑之处在于,这两个像素其实指代的不是同一个东西。前一个像素指的是感光元件有1800万个,后面的像素用来形容渲染照片时使用的像素数量。这两者是一一对应的吗,一个感光元件对应一个物理或逻辑像素?实际上这取决于感光传感器自身性质,也要看相机是如何处理感光传感器采集的数据的,比如相机也许会把多个传感器采集的数据过滤或者合并等等,并不一定是一一对应的关系。
照相机拍出来的照片,在没有渲染到任何一个具体的显示设备上之前,“像素”就是指的一个抽象的、由摄像头感光元件产生的数据块,比如就是一个表示颜色的数字。1800万像素就表示,这些数字有1800万个,仅此而已。至于你用 2k 屏幕显示这张照片(假设你是全屏显示照片),还是有 1080p 的屏幕来显示这张照片,那都是可以的。而且有些手机的相机其实会对拍照结果做算法处理,也可能补偿或者压缩照片。我们唯一能确定的就是摄像头的传感器越多,采集到的数据就越多。
总结
IT 领域术语滥用的现象其实非常常见,“像素”只是其中之一。下次当你再和别人说起“像素”,或者听别人说起“像素”时,我想我们大家终于能统一共识了。但愿我们想的都是对方脑海里的那个“像素”。
参考资料
- https://en.wikipedia.org/wiki/Pixel
- https://en.wikipedia.org/wiki/Pixel_geometry