js中的存储问题
2进制存储
2进制
早期为打点存储 打点为1 不打点为0
后来磁盘存储 正磁极为1 负磁极为0(由电报机转变而来)
早期磁盘存储为5英寸软盘512kb 后来为 3.5英寸软盘 1.4MB
再后来是硬盘存储、光盘、高压缩光盘、高容量压缩级硬盘(磁存储)
固态硬盘(存储芯片 用XPoint颗粒技术,用磁导性存储)
数字、字母、字符存储
ASCII码 数字字母字符保存为十进制数据,然后转换为二进制 存储到计算机中
中国创建的码表叫 GB-5 后来叫GB-2312 台湾叫BIG-5
联合国把各国的编码表合并起来 叫万国码,unicode编码,Unicode编码为十进制不利于二进制存储转换,运算速度慢,于是改编为八进制叫UTF-8 用八进制来写,更容易解析成二进制,后来UTF-8 变为UTF-16,因为兼容UTF-8兼容老浏览器,所以UTF-8常用
颜色存储
每个颜色为rgba() 四位组成
0xFF 00 00 00 红色
R G B A 由8位16进制组成
R颜色最大为255 G最大255 B最大255 A最大255
FF 00 00 红
00 FF 00 绿
00 00 FF 蓝
FF FF 00 黄
FF 00 FF 紫
00 FF FF 靛
FF AA 00 橙 (红色 和 绿色混色 绿色偏少,红色和绿色一样多为黄色,绿色向下降一些)
若变成亮橙色,所有颜色为FF是白色,00是黑色,所以将最后的值调高一些
FF AA 66 如果 最后两位 还要增大,那么中间两位颜色也要高一些 FF EE 88
如果是暗橙色 所有颜色向下降
如果是草绿色 最前两位颜色降低 中间最高 最后两位控制绿色亮度
AA FF 99
最后两位的十六进制的透明度控制 要用 0-1.0 的取值来乘255
如果完全显示出来
AA FF 99 FF
十六进制是数值,可以转为二进制来运算,任何一个颜色存储,存储的是数字,存储的是二进制
图片存储
每个图片由像素点构成,每个像素点由一个颜色构成
每个颜色有个对应的值,每个值为十六进制的值
图片分为两种情况,一种是位图,一种是矢量图
位图:放大后,会看到很多小格,每个小格都是纯色,认为在一个图片中色彩点越多,图片越鲜艳,图片越清晰,色彩点越少,图片越模糊
实际上把图片放大的结果,说明图片到底有多少颗粒
图片的所有颜色存储在一个数组当中,每一个数组的数值存储一个颜色值,第0位,第一位,第二位,第三位,存储第一个像素颜色,第四位,第五位,第六位,第七位存储第二个像素颜色,以此类推,将图片整个存储到数组中
如果图片为10*10像素的图片,当鼠标点击到(4,3)像素时候(从零开始),该像素颜色为(3*10*4+5*10*4)的位置的颜色,这种方法可以应用到取色板取色的时候,也可以应用到判断用户是否点击该图片,逻辑为判断用户点击该像素位置的周围像素,是否和原图片中该像素周围的像素相同
图片压缩
FF 00 00 00中 FF占一个字节,该颜色总共占4个字节,可以应用到计算图片大小的时候
如果计算一个180*180的图片大小,计算方法应该是 180*180*4 = 129500 大小为129K,但是图片实际大小为38.1K 也就是说图片被压缩,压缩方式为临近色彩被取消代替,这个色彩不给设了,会取上一个色彩值,做偏移完成色彩压缩,所以图片大小变小
如果不计算透明度的话,180*180*3=97200 97K 明显小很多,有透明通道和没透明通道要小很多
图片展开问题
因为图片设计制作的时候要考虑到以颜色存储数组,展开时候也一定以颜色方式展开数组,当展开数组时会有严重问题,要求以二进制方式展开,而二进制方式展开时,要求尺寸大小必须按照二进制模式,也就是二的N次幂方式展开,256,512,1024,如果图片设计为1024 * 513,虽然比1024* * 512多了1像素,但是实际上它以1024 * 1024展开,因为大了一位 在原有512无法展开,这时候会扩充2的N次幂,这时候就变成了1024 * 1024 ,此时 1024 * 1024 *4 图片展开大小会翻很大一倍,当然这并不是存储大小,而这是内存中的展开大小,图片虽然读取时候不大,但是进入内存后直接变成两兆,因为以2的N次幂展开 所以内存里会变很大
此时解决办法有两种,
1. 想办法将1像素去除
2. 在原有的基础上加入别的图片,这也就是精灵图的由来
声音存储
声音也可以存储,任何声音由波形图组成,波形就有上下的数字,所以波形可以转换为二进制,因为波形力度大,所以波形转换数字,由若干的波形组成,早期的波形只有四个,只有四个单一音阶组成,音量较小,因为当时电脑存储只能存储小数据,虽然由高解析,但是不能大量数据解析
后来声音的声律扩展,存储量变大,扩展开也变大,声音复杂度变高,出现高保真声音,各种音波组成的数据,合并一起形成的二进制数据流,这就是声音二进制数据流处理方式
视频存储
当把声音的二进制流和图片的二进制流合并起来就叫做视频流
视频是一秒钟有若干张图片,60FPS指的是60帧频,指的是1秒钟经过60张图片
视频播放的知识扩展
若思考一秒钟存储60张图片,然后再加上声音的数据,所形成的就叫做视频,所以原始视频展开量非常大,之前180*180的图片,原大小为129K,129K*60是一秒钟的大小,如果要播放一个半小时,需要 129 *60 * 90 为4G 这还没带声音 还是180*180的图片,可想而知 高保真 高清画面是非常大的数据,CPU无法运行很大的数据,这时候我们就介入了一个硬件 叫做显卡,显卡的显存可以解析很大的数据,显存和显卡的运行速度就尤其重要(GPU),而控制GPU运算,如果好的显卡完成高保真、高清晰、无压缩的原版60帧频视频,显卡大概要造价20W左右
一般压缩后的电影都为23帧频、24帧频
声音识别、视频搜索
说话的声音转换为数字,搜索数字即可
视频搜索,看视频中的人在视频当中什么时候出现过,把人所在的区域的颜色提取出来,在每一张的图片中对帧寻找对应的颜色值,是不是在同等区域中类似存在,灰度算法当中运行找到数据,人就可以精确识别,可能会遇到两种情况,一种叫精确识别,一种叫模糊识别,模糊识别还要再进行分类