既然矢量图放大缩小都不失真,为什么还要使用位图?

为什么不全部使用矢量图就好了?
关注者
238
被浏览
215,003

23 个回答

这个问题太有趣了,我也想过很久,在此把一部分理解分享给大家。


1.一切为了视觉,为了信息

人一生大多数信息都是从眼睛看进来的,比如这篇回答,就是一大堆“文字”这一视觉媒介堆砌成的抽象的信息集合,认识字便可以读懂这篇文章。

另一方面,人类同样也需要形象的视觉信息形式,“图像”就是人类发明用来承载形象的视觉信息的一种文明产物。

我们有理由相信,人类用图像记载信息的行为,要比人类开始写字的行为要更早。

大家可以想象两个画面:

一,一个原始人在沙滩,用很多贝壳拼出一只鸟;

二,另一个原始人在洞穴,用石块在洞穴壁上画出一头牛。

别急,我没岔开话题,其实呢,这两个原始人就已经开始各自走向了位图和矢量图的不同道路。


2,从“具体”到“够用”是个从追求到放下的过程

图像能比文字符号更具体地描述信息,比如你可以从一张照片里更加清楚地知道一个人的长相,一栋建筑的外观。任何语言的形容都不如图像的效率高。(虽然“更具体”就失去脑补的乐趣了)

没错,咱要的就是“具体”,图像所追求的目标,正是无限趋向绝对的具体,也就是追求图像越来越清晰,越来越真实。

史前人类的壁画发展到文艺复兴时期的油画,几乎就是一个“变具体”的过程。

文艺复兴时期的画作里,有很多已经接近了现代相机摄影的效果,这是对“具体”的极致追求,只是实现的手段是比较原始的。而现代的我们,拿着手机咔嚓一声,几千万像素的数码照片就出来了,完成了旧时代油画家辛辛苦苦几个星期的工作。

(我知道有人想拿艺术说事儿,但咱现在只讲它的信息传播意义)

然后,我们向后推演,一个问题应运而生:

图像要多“具体”才算完美?多清晰才算最好?

答:最好能达到绝对具体!也就是我可以远看景色磅礴,近看蚂蚁搬家,没有畸形没有误差!

但这可是很难实现的。

现在专业领域就已经有几十亿像素的照片了,但你想让这么大的图像文件在互联网上满天飞?在手机电脑里随随便便存个几百张?点击秒开?醒醒,这不可能,十年之内都未必。

到这里我们会发现,过度的具体的信息已经丧失效率了。

人生苦短,切记“够用”大法!对,够用就行,别自己跟自己过不去。

其实,你看山川大海的时候没必要看蚂蚁搬家,你需要看蚂蚁搬家的时候无需山川大海。“图像”作为非物质、信息的形式,它必须利于传播,容易编辑,而效果在平时只要能够满足人们的需要就够了。


3,位图其人

还记得前文随口说的,那个用贝壳拼成一只鸟形状的原始人吗?

如果问那只鸟是什么图,我可以告诉你,它是位图。是的,澡堂子的马赛克拼成的墙壁图案,女孩子玩儿的十字绣,都是位图。

位图就是用一些东西当成像素,由这些像素点阵组成图像。

在计算机中,事情略有点不一样,就是不能像十字绣一样,哪里需要绣就只绣哪里,你不去绣的地方就算留白了,不行的。因为十字绣有绣布,而计算机不存在这个绣布,所以计算机必须连同绣布一起绘制,所以就算是画面上什么都没有,也要记录“0000000……”一大串0。

计算机的位图文件是逐行记录的,逐行记录的意思就是说,这种“0000000”的代码有很多行,每一行的数字都一样多,把它们摞起来就构成了一个矩形,比如:

00000000000000

00000000000000

00000000000000

00000000000000

到这儿,一个纯白无暇的“位图白纸”就完成了,你就说白不白吧……

那么如果是一个有内容的位图呢?

简单,改数字就行了,哪里有内容就改哪里。

然后就变成了这样:

这张字符画已经可以大致反映出“位图”这种图像形式的基本特征。

发现没?我们的位图文件,本质上就是一大串超级长的数字,到需要在显示屏上看的时候,把这些数字逐行展开在平面就行了。

这就是位图的基本原理喽。


4,位图文件压缩

聪明的人们很快发现,位图里一些单色区域可以简化,比如这行有连续的9个1,直接写成9,或者写成1x9不就得了?这是数学,也是直觉。

所以,位图单色区域的代码,我们就把它简化一下。到这里,人们打开了一闪新的大门:“位图文件压缩。”

如果最开始用乘法,用特殊代码,都属于是通过“找规律”来“无损记录信息”,那么找到更多规律的话,就可以节省更多空间,还不会丢失信息啦!

人们结合了古今智慧,各种数学算法,找到了多不胜数的规律,大规律套着小规律,小规律套着老规律,最后把位图代码里适合用规律记录的部分全都用规律记录,剩下难以用规律记录的部分就少了,然后,把它们编写形成一个文件,让图像文件变得更小,这就是“无损压缩”。

文件压缩了就会变小,上传和下载都变快了,用的时候解码一下,就恢复成了完整位图。

然而人们还不满足,因为从“够用”角度看,事情还能再挣扎一下。比如干脆把相似的代码四舍五入,图像虽然会损坏一点点,但显示出来也不是没法儿看,那我们干脆把容许偏差提升一点吧!反正也不容易看出来!这就是“有损压缩”;有损压缩是允许丢失信息和精确度的。

随着压缩算法越来越复杂,人类必须准备一本“压缩规律解码对照本”来解码图像文件;“压缩算法”就越复杂,“解码对照本”就越厚。

喏,信息传播大体规律就是这样,一个眼神能传情,就需要两个人都持有同一套感情解码本。

不过别担心,位图压缩之路不会没有尽头。就算压缩算法再怎么用规律记录像素,也总得用这些记录来合成一个位图文件,当这些记录的体积并不比压缩前的编码更小,也就没必要进行压缩了,不然容易出现压缩了之后文件体积反而变大的荒唐事。所以,压缩之路仍然要遵循“够用”。

因为图像存储还是压缩都有很多种办法,不同的办法也就是不同的格式,一如我们常见的jpg,GIF格式,它们都需要各自的解码器(隔壁视频压缩领域为了流畅回放,以前甚至需要设计出专门的解码处理芯片进行“硬件解码”)。


5,矢量图

矢量图要出场了!

什么位图?什么乱七八糟一行一行的00000?我们传播和记录那些无意义的东西干嘛?我们要传播的是信息!是画面!

画面不就是点、线、面、位置吗?那我直接记录这些信息不就得了吗?你要直线,我就给你根直的,你要曲线,我就给你弯的,你要什么颜色,我就给你什么颜色,不就得了吗?

隔壁位图抱着厚厚的解码本,也只不过是用来记录代码规律来压缩文件,那我干嘛记录代码规律?我直接记录图形规律多省事?原始人都知道这么搞!

就这样,矢量图被创造出来了。

是圆是方,是红是白,是线条还是多边形,怎么放置,记一下,需要看的时候,直接解码出图形,完事。

矢量图:“用黑色,画个圆,圆上方画个波浪线,一个浪比一个浪大那么一丢丢,好嘞。”

这就是矢量图的文件形式。

可以想象,有些时候矢量图需要记录的东西往往比位图少很多,所以,矢量图文件通常也很小。

矢量图:“位图先生,你无损还原一个正圆需要几行代码呀?”

位图:“严格来说,多少行也办不到,因为我用像素的。其实分辨率差不多就能凑合用,最近大家都升级视网膜屏……”

矢量图:“听说您的无损压缩算法很精妙,能让图片无限放大吗?”

位图:“你非得这样吗……”

矢量图:“您放大一百倍怎么样?会不会不变得不清晰呀?对了,您玩过儿CAD吗?”

位图:“神特么CAD!你是来捣乱的吧?”

为了便于理解,可以说,位图如果要记录一个圆,要用像素码成个无限接近圆形的点阵骗过眼睛,而反观矢量图,想要记录同样的圆的话,只需要写一个“圆”字就行了。

矢量图只记录“点、线、面、位置”等等,所以有着完美的精确度和还原度,放大多少倍也无妨,这是矢量图的先天优势,但这不意味着矢量图是完美的。


6,矢量图的其他优点和两个弊端

矢量图的优点除了大家知道的“精准”和“无损缩放”,还有一点特别重要就是“容易修改”。

因为矢量图文件记录图形的方式,让它可以很方便地随时修改图形,比如把一个logo上的文字增大一些,把一个CAD草图的局部改一改……改形状、改颜色、改大小、改粗细,信手拈来。

换做位图,呵,位图本质上根本不支持修改,所谓修改,其实就是局部擦除重画。可能你得抠图,或者擦,抠不好就是恶心的毛边,擦了可能就是几个小时的重复劳动。

然后说矢量图弊端,

第一个弊端是,矢量图有个根本缺点——它所记录的“点、线、面、色彩”,往往是自然界并不存在的东西,而是纯粹的抽象概念,所以也难以在自然界中直接采集。

什么意思呢?就是大自然中没有野生的“圆”。

数码相机的感光元件的工作原理是用镜头采集物体反射而来的光线,然后记录一下这一刻感光传感器上的光线信息(老胶片相机的原理也几乎一样,只是传感器换成胶卷)。可试问什么传感器能够采集到一个自然界里不存在的正圆呢?

没有,只有你的脑子能采集,或干脆想象出来,然后通过你的手在计算机上画出这样的矢量图。(以后可能会出现AI自动联想识别——绘制矢量图)

所以我们常见的矢量图,往往都是出自人手绘制,而不是采集自镜头。

继续说下去的话就可怕了,其实“矢量图”只是人类通过抽象思维模拟出来的东西,实际上这世界上没有任何一台显示器可以真正正确地显示矢量图形,都是把矢量图形文件转化为像素点阵(类似于位图的原理)放映在显示器上。可怕就在于,理论上,能够绝对正确显示矢量图的显示器,在物质世界是不可能存在、不可能出现的。

有关显示器这一点很重要,下面会提到。

矢量图第二个弊端是,如果说矢量图的优势是放大,那劣势就是缩小(位图正好相反),而且其文件由于天生就是绝对百分百的信息密度,所以基本无法压缩(你右键点击压缩这种操作不算)。

一旦需要完整记录细节繁多的图像信息,矢量图这个“老实人”就需要特意去绘制每一个细节才行,哪怕这些细节根本没必要放大一百倍观看,它的本性也让它也只能一笔一划按照这个标准搞。

有人要问了,那我们潦草地绘制行不行?

嘿,还真不行!你爱潦草不潦草,矢量图会固执地把你每个瞎划拉的细节的长短胖瘦记录得一清二楚!

这就麻烦了,因为不是每个图像都有放大观看的必要。大多数时候显示设备和传感器的像素数它就是固定的,无论它是胶卷、人类视网膜,液晶显示器、电视机、手机,还是相片、壁画、书籍;而且由于物理世界的微粒结构,他们本质上统统都是可怕的位图!(为省事儿下文我就把它们称为“显示器”吧)

这就决定了一件事——确定了显示器,我们很容易就可以知道到什么程度算是“够用”。

所以,矢量图的记录矢量、缩放不失真的特性成了双刃剑——图像需要记录的细节越复杂,矢量图要记录的信息也就越复杂,文件也就越大,完全忽视其记录目的最终指向多少像素的显示器。

无论在电影院巨幕,还是智能手表上显示,可能都要使用同一个矢量图文件才行。

而位图,则可以为某个显示器量身定制。如果想放在比位图文件像素数小的显示器上,不仅可以缩小显示,更是可以直接降低文件像素数来缩小体积。

对位图文件来说,显示器固定的情况下,我可以给你一个像素一个像素对应着记录,大不了我不压缩了,我可以让每个像素都记录一个细节,反正我就这么大体积,至于多少细节信息,摆烂随便塞……

试问这种局面下矢量图怎么办?一幅细节还原到显示器每个微粒细节水准的矢量图,那么它不是已经变成了位图(用矢量元素阵列模拟位图),就是有着惊人数量的矢量元素和恐怖的文件体积(疯狂使用点线面色勾画)的怪物。

矢量图和它的近亲——3d多边形,都有这类困难,也都想出了诸如“自动生成某类型细节”的解决方案,但由于细节库不可能无限多,效果取代不了位图那完美对应显示器像素点进行细节发挥的先天优势。(不过3d多边形两边粘,它作为记录抽象矢量的文件,却可以通过减少三角形数量,最后达成像位图一样通过同时损失细节和精度进行体积缩小)

这时候再拉出位图阵营大杀器——相机!位图瞬间就能捕捉完成,咔嚓一声,如鱼得水。矢量图就只好羞涩地躲回矢量绘画软件和CAD里陪着设计师们搞创作,一副乖巧的样子。毕竟这是位图难以冒犯的领域。(但模拟复杂笔刷、带有过多细节的美术式绘画方式,依然不可避免是用位图来实现)


7,评价

简言之,位图适合记录细节多,不要求绝对精度的“图像”,

而“矢量图”适合记录想象中、意识中的严丝合缝的“图形”。

用位图画logo,搞CAD设计是不靠谱的,

用矢量图做复杂笔刷电子画,做摄影也是不实际的。

矢量图取代位图,或反之取代,目前看来都是不可能的。

所以我们还是要讲究够用、适用,因为“图是给人看的”这个基于信息传播角度的大前提。让位图“负责现实”,矢量图“负责想象”,两者各司其职吧。

矢量图和位图的对一块区域的渲染的「描述方式」是不同的:

  • 位图定义了区域内每个位置的颜色值;
  • 最传统的矢量图SVG实际上是一种XML格式,是通过「路径」和「填充颜色」来描述渲染的。由于「路径」在缩放的情况下并不会失真,因此矢量图具有不失真的特性。

因此,在「对像素的控制」上,矢量图是无法和位图相比的(位图是精确控制),所以大家会说「矢量图的表现力不如位图」。

在简单图形的情况下,矢量图的文件大小是比位图小的。但是,如果是更加细致的图像,矢量图的「路径」就会越多,路径信息量会膨胀得很快。

这种膨胀,不仅是文件大小膨胀,还有对渲染能力要求的膨胀。

另外,位图处理其实已经成为一种标准化流程,可以硬编码到显卡内,显卡就是专门为了处理位图而存在的。

而矢量图其实还不存在一种标准格式和标准处理流程,主要有SVG和Adobe Flash。因此处理矢量图只能靠CPU。

--------------------分割线--------------------

PS:但虽然这么说,但如果大家想体验一下矢量图的表现力,可以上QQ秀[show.qq.com]上看一下。

上面所有的形象都是矢量的(Flash),可无限不失真,打印成巨幅宣传海报一点问题都没有。