《JavaScript高效图形编程(修订版)》——6.2 位图、矢量图,或两者兼而有之?

简介: 位图图像(如无所不在的JPEG格式)是不同颜色的像素组成的网格。它们不能很好地进行缩放,当放大时将看到明显的方块,而缩小时将损失信息。这是因为单个像素不是被放大了就是被丢失了。有些画布实现可以通过使用模糊滤波来降低这种不良效应。位图最适用于有着大量细节的摄影风格的图像。

本节书摘来自异步社区《JavaScript高效图形编程(修订版)》一书中的第6章,第6.2节,作者:【美】Raffaele Cecco著,更多章节内容可以访问云栖社区“异步社区”公众号查看

6.2 位图、矢量图,或两者兼而有之?

画布为不同的应用,设计了一个小而精的矢量图和位图命令集。两者之间的区别是什么?

矢量图

矢量图形由直线和曲线的数学表示定义。你可以填充矢量形状或/和描绘其轮廓。矢量图形的关键优势在于它们可以缩放到任意大小而不损失质量:边缘和细节依旧锋利。矢量图最适合单色或渐变区域面积较大、细节密度较小的图像。最典型的有:图表、图形、旗帜、线路图和卡通风格的图像。因为其数学特性,JavaScript操作矢量图特别方便。

位图

位图图像(如无所不在的JPEG格式)是不同颜色的像素组成的网格。它们不能很好地进行缩放,当放大时将看到明显的方块,而缩小时将损失信息。这是因为单个像素不是被放大了就是被丢失了。有些画布实现可以通过使用模糊滤波来降低这种不良效应。位图最适用于有着大量细节的摄影风格的图像。

警告:
无论如何生成图像,画布最终可视的输出结果始终是位图。如果你要利用矢量缩放的优势,你需要使用矢量图命令在新的尺度下重绘图像。仅仅使用浏览器交互或CSS来放大画布,其效果和放大位图图像一样:会有块状/模糊效应。

相关文章
|
JavaScript 前端开发
带你读《小创客趣玩micro bit开发板编程》之二:JavaScript Blocks 图形编程
本书从 micro:bit介绍、micro:bit开发方式、Makecode图形化编程和创意编程案例实践4个维度带领大家逐步理解和学习 micro:bit的使用方法。
|
移动开发 JavaScript 前端开发
《JavaScript高效图形编程(修订版)》——导读
JavaScript结合了HTML5 Canvas等特性,给Web开发人员提供了真正可以不用Adobe Flash等插件的方案。而WebGL等特性则为使用JavaScript和浏览器进行图形编程描绘了非常美好的未来。
1413 0
|
Web App开发 JavaScript 前端开发
《JavaScript高效图形编程(修订版)》——6.11 一个图形使用画布的WebSockets聊天应用
HTTP数据携带了大量的头信息。请求一个字节的数据可能会导致发送数百个字节的、额外的、“看不见的”头信息也被发送。头信息通常包含被传送数据的性质,如内容类型、缓存、编码等。
1908 0
|
Web App开发 JavaScript 前端开发
《JavaScript高效图形编程(修订版)》——6.10 用画布sprites取代DHTMLsprite
我们尽量将绘制sprites的细节“隐藏”在DHTMLSprite对象中,使得应用程序可以很容易实现和使用一个不同的sprite系统。现在我们将在演示中使用一个新的CanvasSprite对象,它利用了性能更强的画布元素。
1386 0
|
JavaScript 前端开发
《JavaScript高效图形编程(修订版)》——6.9 画布和递归绘图
下面我们将尝试用更有趣的东西,具体说是用一点三角函数和一点随机元素,来代替简单的递归递减。图6-14显示了递归调用简单的画布画线命令得出的树。递归图形函数的一个显著特点是看起来比较自然,我们可以看到分支的末梢非常精细。
1549 0
|
JavaScript 前端开发 存储
《JavaScript高效图形编程(修订版)》——6.8 使用画布创建动画
基本上所有的位图动画系统都在幕后做类似上述循环的操作。在某些情况下第2步是可选的。例如,如果背景完全被实色、渐变或位图图像填补,那就没有必要清除它。第5步是必要的,这使用户有机会看到动画,并让浏览器有时间去做其他事情,否则该浏览器将立即被冻结。
1474 0
|
Web App开发 JavaScript 前端开发
《JavaScript高效图形编程(修订版)》——6.7 画布绘制基础
通常情况下,两个圆心在相同位置,而且第一个圆在第二个圆之内。内圆的所有区域都用addColorStop()定义的第一种颜色填充;这种颜色将渐变到由addColorStop()定义的最终颜色,并填充从内圆到外圆的区域。而外圆外的区域也是由addColorStop()定义的最终颜色填充。
1794 0
|
JavaScript 前端开发 程序员
《JavaScript高效图形编程(修订版)》——6.6 画布导出器
Adobe的Flash CS5+有一个画布导出器可以将部分Flash导出为JavaScript 画布源代码。这对想兼顾Flash和画布的开发者很有用。然而,由于该解决方案需要购买Flash创作工具,它对仅仅想开发画布的人来说可能不太划算。
1618 0
|
Web App开发 移动开发 JavaScript
《JavaScript高效图形编程(修订版)》——6.5 画布与Adobe Flash的对比
大多数网民都熟悉Adobe Flash。大量的在线广告内容、视频和游戏都使用了Flash。事实上,有很多网站是完全用Flash创建的。这是一个可以追溯到1996年的成熟插件,现在几乎所有系统上都安装Flash。
1554 0
|
XML JavaScript 前端开发
《JavaScript高效图形编程(修订版)》——6.4 画布与SVG的对比
有些人最初对苹果创建另一个浏览器图形标准持保留意见,他们可能认为SVG已经足够了。从表面上看SVG和画布提供类似的图形能力,但它们有一个根本的区别:SVG是一个高层的、基于XML的标记语言,可以通过创建XML元素属性来定义图像;而画布则提供了可以直接从JavaScript访问的绘图API。
1931 0