简介
今天我要给大家介绍一下计算机图像
也就是图片的相关知识,以及常见图片格式之间的区别
01-BMP
让我们从最应该了解,但也最不应该了解的格式 BMP 格式开始吧
BMP 全名 Bitmap 位图
它是微软于 1990 年为它的操作系统 Windows 3.0 研发的图片格式
并且由该操作系统上自带的图像编辑器“画图”程序率先支持
因此 BMP 这种图片文件格式
可以认为是 Windows 操作系统唯一的亲儿子
这也就是说,随后在 Windows 操作系统上推出的
其他所有的看图软件和图像编辑器,就都必须无条件支持这种文件格式
其实 Bitmap 位图这个名字起的非常烂,因为它本身是一个图片文件的唯二类型
本视频介绍的十几种图片格式中,除了最后一种 SVG 之外,其他的图片格式
均是这种图像类型“位图图像”
这就好比你推出了一款叫做 SUV 的汽车品牌,只会给人类徒增混乱
名字取的烂还不是 BMP 这种格式最大的问题
我们只需要把 BMP(图片格式)
和 Bitmap 位图(图片类型)这两个名字
当作两个概念区分开来就可以了
它最致命的缺点是不支持压缩
把你用手机拍摄的 JPG 格式照片导入电脑,再用画图程序打开
并另存为 BMP 格式,图片大小会直接增加 20 倍
换句话说如果你的手机照片存储的不是 JPG 格式
而是 BMP 格式的话
128G 内存的手机,就相当于变成了一个 6G 的手机
正是因为这一点,让 BMP 成为了一个不受所有人待见的孩子
甚至连他妈画图程序都不再待见他了,这里我可没有说脏话
我们用画图新建一张图片,随便画几笔之后点击保存
再看一下默认选择的图片格式就知道了
02-色深
如果你留意保存对话框中的 “保存类型”这个设置项了
你会发现,它默认显示的是“24 位位图”
如果你点击了这个下拉框,还会从中发现其他 3 种同为 BMP 格式的选项
“256 色”、“16 色”、和“单色”
你挨个保存一下,你会发现256 色会让你的照片中的过渡效果
全部变成像梯田一样的一溜一溜的效果
保存成 16 色,会直接让天空黯然失色,其他物体也会直接失去一半颜色
保存为单色,就变成科学计算器一样的效果
甚至还不如 90 年代的黑白电视,黑白电视好歹还有灰色不是
那 24 位、256 色、16 色、单色是什么呢
你从它们的名字应该能推测出来,它说的是颜色数量
也就像你用水彩笔或者蜡笔画画时,所使用的画笔颜色数量
它的计算机术语叫做“色深 Color Depth”,有时也会被称作“位深”
因为它的单位名 “bit” 的中文名是 “比特” 或者 “位”
这个单位实际上就是 2 的几次方
24 位色深,也就是 2 的 24 次方种颜色,算出来的结果大约为 1600 多万
我们在购买手机或者显示器的时候
经常会在宣传页或者包装箱上看到这个数字
256 色、16 色、单色这三个色深
如果用位色的单位表示,分别是 8 位色、4 位色、和 1 位色
所以你在画图之外的其他图像编辑器里,可能见到的会是这种表示方法
24 位或者说 1600 万,是目前最主流的色深
它有一个专门的名字 “TrueColor 真彩色”
但现在的显示技术正在向 10bit 推进,这看上去似乎比 24 位少了不少
实际当然不是,因为它指的是 RGB 色彩表示中R、G、B 这三个独立分量各自的位深
关于 RGB 本视频稍后再会详细介绍
所以 10bit 换算为之前的位深单位就是 30 位色,再换算为实际颜色数量就是“10 亿色”
它也有一个专门的名字 “DeepColor 深彩色”
但总感觉“深色”没有“真色”厉害啊,因为你再比它深,你也不能叫“更真”
那不论如何 10 亿种颜色,听起来是不是有点太离谱了
你可能非常想问,真的有这个必要吗?
殊不知,曾经 1600 万色刚出来时,也被许多人认为是
人眼所能识别出的颜色数量的极限,所以才会被冠上“真”
这么一个至高无上的头衔
这时你可能会说,既然 1600 万不行,那 10 亿色总该是终点了吧
我劝你千万不要这样想,因为谁也无法阻挡科技进步的车轮
10bit 显示器普及之后,还会有 12bit
也就是 36 位色,或者说 686 亿色,终究也会到来
03-像素
色深说了那么多,无外乎就是有几种颜色而已
那么问题来了,它指的是什么东西的几种颜色呢
是像用彩笔画画时,各个线条的颜色吗
肯定不是,因为我们一般在图片上看不到明显的线条
如果,你用放大镜对准你的手机屏幕或者显示器屏幕
你应该会看到一个个的不同颜色的正方形方块
这些正方形方块同时只能显示一种颜色
不能一半显示红色、另一半显示蓝色
色深指的就是这些可以发光的小方块各自所能显示出的颜色数量
这些非常小的显色方块就叫做“像素 Pixel”
但这个像素我们一般把它称作像素颗粒或者像素点
因为像素还经常用作形容词,比如像素游戏、像素画、像素艺术等
用像素颗粒或者像素点就能将它们区分开
它的技术原理有 LCD、LED、OLED、AMOLED、Mini-LED 等等
但这些不在我们今天这期视频的讨论范围之内
其实准确来说,显示器的像素其实不关图片什么事
我们打开记事本,在里面输入几个字,再保存关闭,整个流程跟图片没有半毛钱关系
所以我刚刚说的像素其实叫做屏幕像素,或者说物理像素
但它与我今天想说的图片像素有直接关系,而且非常类似
我们用画图软件打开一张图片时,右下角的“缩放级别”默认显示为 100%
这表示图片上的图片像素颗粒,,与显示器的屏幕像素颗粒完美地一一对齐了
也就是说图片的内容,通过显示器这个媒介毫无保留地呈现给了你
但如果不用放大镜,你还是很难感知到像素这个概念
这时,我们可以把缩放滑块拉到最右端,缩放级别会显示为 800%
这时你应该会看到,原来看不到的一些正方形方块了
这些方块每一个代表的是一个图片像素颗粒
而且每个图片像素颗粒现在由屏幕上的8x8 共 64 个屏幕像素颗粒共同显示
有了这个软件“8 倍镜”,你应该终于能感知到图片像素是什么了
但是如果你打开图片时没有乖乖地用画图,而是用了双击之类的看图软件
那么当你放大 8 倍之后,有很大的概率依然看不到图片像素
这是因为大多数看图软件会在你放大图片时
将 8x8 共 64 个屏幕像素中,除 4 个角之外的其它 60 个像素
按 4 个角的像素颜色,利用“插值算法”计算一个中间颜色出来
产生渐变的过渡效果
至于看图软件为什么要这样做
是因为大部分人“不喜欢”我的世界这个游戏
所以看图软件也不想让你不喜欢它
04-分辨率
了解完像素之后,再说“分辨率 Resolution”
那简直就是麻绳切豆腐,轻而易举了
再回到我们的画图软件,在靠近左下方的状态栏中
我们会看到一个 “数字A x 数字B 像素”的字样,这就是当前打开图片的分辨率
分辨率也可以叫“图片尺寸”,它不会随着缩放级别的变化而改变
数字 A 表示的是图片在水平方向上的像素数量
数字 B 表示的是图片在垂直方向上的像素数量
它们分别叫做图片的“宽 Width” 和 “高 Height”
下载电影或者看 B 站的这期视频时
会看到诸如 1080p、720p或者 2k、4k 之类的字样
它们就是分辨率的简称
刚才说的这几个都是“标准宽屏”,也就是视频图像分辨率的“宽高比”为 16:9
而不是老式电视(俗称方屏)的 4:3,也不是超宽屏(俗称带鱼屏)的 21:9
因此在新式电视上看老式电影会在左右有黑边
在老式电视上看新式电影,或者在新式电视上看 IMAX 电影,会在上下有黑边
如果你启用了屏幕图像拉伸,那当我没说
这些分辨率的简称中后缀为 p 的简称,是指分辨率的高为这个数字
再根据 16:9 的宽高比,即可算出它对应的宽
后缀为 k 的简称,指的是分辨率的宽为这个数字乘以 1000
比如 2k 指的是 2560,给多了;4k 指的是 3840,给少了
当然还有 6k 8k 16k 等等等等
是不是有点乱了,别急还有
常见分辨率有时候还有像 True Color 真色一样的专门名称
比如最常见的 1080p,叫做高清 HD 或者 全高清 FHD 或 Full HD
但是在 1080p 没出生前,高清 HD 指的是 720p
所以在遇见 HD 的话,需要发挥一下我们的小脑瓜自行判断一下
因此聪明的视频网站或相机厂商,都会避开 HD 这个分辨率名称
05-JPEG
JPEG 是一个诞生于1992 年的图片文件格式
英文全称,我们不管它;中文名称,我们也不管它
老外的叫法为 J-Peg
因为它常见的文件后缀名有两个:.jpeg 和 .jpg
所以国内主流叫法为 JPG 图片
如果你把 J 读作勾,把 X 读作叉,那它还能有个名称
JPG 格式占据了互联网上,也就是网页上图片 74% 的市场份额
以及数码相机或者手机拍照领域一大半的市场份额
原因当然就归功于刚才 BMP 小节中所说的20x 的压缩率
它主要使用了:色度抽样 - Chroma Subsampling
DCT 离散余弦变换 - Discrete Cosine Transform
Z 字形编排 - Zigzag Sequence
RLE 游程编码 - Run Length Encoding
范式霍夫曼编码 - Canonical Huffman Code,等等一系列技术
才将图像数据的压缩率提高到了 20 倍之高
当然这些技术,全部不在本视频的讨论范围内
如果你感兴趣,可以自行搜索
如果把你的 128G 内存的手机换成 6G 你都会嗷嗷叫
那如果回到 1992 年,把你 1GB 的电脑硬盘换成 50M ,那你又会干什么呢?
06-有损压缩
虽然 JPG 很强,并且占据了绝大多数的市场份额
但它并不是完美的,如果它是的话,这个世界就会清净很多
这个视频也就可以到此为止了
因为它也有两个致命问题 :“有损压缩”和“不支持半透明”
我们从网上下载(另存为)一张扁平风格,直线元素较多的 Logo 图片
它的格式一般是下一节要讲的 PNG,或者是本视频最后一节要讲的 SVG
如果是 PNG 格式,就还用我们的“小可爱”画图软件打开,另存为 JPG 格式
另存为完成之后,先不用关闭画图程序。
打开我们的“8倍镜”,定位到 Logo 上某条分界线的边缘
你应该会发现在边缘两侧有一些絮状暗纹,这些条纹称作“噪音 Noise”或者“失真 Artifacts”
这就是 JPEG 高压缩率的代价,这种会让图片与原图不太一样
或者说会丢失一小部分信息的压缩方式被称为“有损压缩 Lossy Compression”
与此对应,压缩之后与原信息完全一致的压缩方法叫做“无损压缩 Lossless Compression”
压缩软件的压缩全部为无损压缩,关于它以后有机会我会再做视频,专门给大家讲解的
如果看到这里,让你对 JPG 格式产生了人设崩塌的感觉
那我就必须再补个刀,MP3 也就是你在网易云和 QQ 音乐上所听的音乐
还有 MP4 ,也就是你现在正在看的这个视频,也全部都是有损压缩
其实呢,你完全没必要伤心
因为 JPG、MP3、MP4 这三个图片、音乐、视频领域的老大
都应用了非常高明的技术,只在你最难察觉到的地方进行有损压缩
也就是说绝大多数人都很难察觉到,它们的有损压缩与无损压缩之间的区别
如果从图标、Logo 领域切换回 JPG 擅长的领域:照片
就真正没几个人能区分得开了
因此,在照片这个难分辨噪音,不需要半透明的场合,它依然是最靓的仔
而且如果我们用画图之外的图像编辑器,比如 PS 或者我上一期视频介绍的 http://Paint.NET
来保存 JPG 图片时,还会额外弹出一个“图像质量”或者“品质”的设置对话框
把这个值设置在 85-95 之间,即可让大部分人无法察觉到它与无损压缩的区别
所以你可以根据场合在这个区间内调整,也可以无脑设为 90
或者实在不行,你还可以设置为 100,这几乎就是无损压缩了
但我十分不建议你这样做,因为图像质量这个设置在超过 90 之后
文件大小也会逐渐追随 BMP 而去
07-EXIF
常年与 JPG 图片格式打交道
你一定或多或少地见过 EXIF 这个单词
它一般读作 /ˈeksɪf/,与“出口 Exit”近似
它主要用于记录拍照设备的相机型号和相机设置
以方便摄影师进行后期处理
一般用手机相册的查看详情,或者电脑上的文件属性就可以查看
于普通用户而言,这些信息都没什么用
但要说最有用的,那可能当属里面的 GPS 信息了
对于 GPS 用过手机地图导航的朋友都知道
它就是你在地图上的具体位置,一般可以精确到米
所以,如果你经常旅游的话,利用每张照片中存储的 Exif 信息
手机相册可以一下子帮你找到,在某个地点拍摄的所有照片
相当于多了一种额外的照片组织方式
但也正是这个 GPS 信息,或许会成为某些朋友的噩梦
如果你在微信聊天或者群聊中,发送照片时勾选了“发送原图”
那么你拍摄这张照片时的,精确到米的位置信息就泄露给了别人
有些朋友可能会说新版微信,现在发送原图时也会清除 Exif 信息了
多谢提醒,但某些其他朋友可能并不只用微信,还会用飞信、翼信啊什么的
其他软件什么情况我们也不知道
所以最稳妥的办法就是,在手机相机的设置中,关闭位置信息的记录
08-PNG
PNG 全名 Portable Network Graphics
中文名便携网络图像,这是官方给出的解释,但你不要信他的鬼
因为这个名字是他们发布这个图片格式的几年后才向外公布的
而他们的最初想法是:PNG's Not GIF
翻译过来就是“PNG 不是 GIF”
你可能会很奇怪,为什么解释里面也有 PNG 这个名字呢
这是老外贼喜欢玩的一种技俩,叫做递归缩写 Recursive Acronym
我一直很鄙视这种方法,因为你如果不以 P 开头的话,用哪个字母不都可以吗
而且这还不是少数的个例
比如世界上最好的编程语言:PHP
全名 PHP: HyperText Preprocessor
中文名 PHP 是一个超文本预处理器,但我们也不能信他们的鬼
因为这个名字也是他们推出 PHP 的几年后才向外公布的
而他们最初的想法是:Personal Home Page
翻译过来就是:个人主页
从这我们就可以看出,老外们不仅喜欢用递归缩写这种烂招
还喜欢在起名字的时候拍脑袋,管他什么含义,过几年我们再慢慢想
那我们回到 PNG 这种图片格式,之前看 JPG 的有损压缩噪音的时候
转为 JPG 的源文件,我们就用了 PNG 格式
那我们就已经大概知道了,PNG 是无损压缩的
而且,他的无损压缩不是可选的
也就是你在保存为 PNG 格式的时候,不能选择为有损压缩
很多人把这一点当作 PNG 的最大缺点,但我却恰恰认为这是它最大的优点
就是说如果你看到一张图片的格式为 PNG
那说明不管他之前被编辑过了多少次,只要没有转换过格式
那它的内容,从创建的那一刻起,就没有失过真
而 JPG 则就恰恰相反,你看到它格式的第一眼就已经知道
它从来就没有保过真,而且编辑的次数越多,失真的就越多
总结成一句话就是,在需要经常编辑的场合
PNG 就是可靠的象征
你可以完全信任 PNG
09-RGB
之前讲色深的时候提到 10bit 色深,实际上是 RGB 红绿蓝三个分量各自的数量
我们拿物理放大镜对准显示器或者手机,这里不能用“八倍镜”
仔细观察,会看到每个像素点,其实不是方方正正的单色正方形
而是会看到明亮不同的红色、绿色、蓝色,三种颜色的发光体
它们最常见的排列方式为:三个长条矩形并列排成一个正方形,称为“标准 RGB 排列”
其他排列方式有 RGBW 排列、RGB Delta 排列、Pentile 排列、钻石排列、周冬雨排列等等等等
为什么要发明这么多排列方式
显示巨头LG 、三星和京东方自然有他们的道理,我们在此就不展开了
但不论在排列上玩再多花出来,我们还是都能把它们等价于标准 RGB 排列
如果一个显示器是 LED 或其变种,也就是说不是 LCD 显示器的话
那说明你看到的红绿蓝长条矩形发光体是一种被称为发光二极管LED 的电子元器件
各种路由器、家电上的红色、绿色指示灯都是 LED
这些 LED 各自可以发出不同亮度的灯光,以现在主流显示器 24 位色深举例
每个 LED 可以显示 0-255共 256 个不同亮度的灯光
0 为黑色、不亮,255 为最亮
R、G、B 三个 LED 同时只开一个,分别开到最亮,就会分别显示红色、绿色、蓝色三种颜色
如果同时把红色和绿色开到最亮,则会显示红色和绿色的混合色:黄色
如果同时把三盏灯都开到最亮,则会显示为白色
这就是光的三原色红绿蓝,及其组合原理
你可以到画图的编辑颜色窗口中好好把玩一番
这时你可能会有个疑问,为什么非要这么麻烦用三种颜色的灯光来混合呢
难道不能直接造一种可以直接产生各种颜色光的 LED 吗
是的,弱小的人类还远不能
因为单单造出一个蓝色 LED,就可以获得 2014 年的诺贝尔物理学奖
如果你能造出来,我猜他们应该会发给你,10 个诺贝尔物理学奖
(未完待续)