js中的儲存問題

weixin_45207266發表於2020-11-03

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幀頻

聲音識別、視訊搜尋

說話的聲音轉換為數字,搜尋數字即可
視訊搜尋,看視訊中的人在視訊當中什麼時候出現過,把人所在的區域的顏色提取出來,在每一張的圖片中對幀尋找對應的顏色值,是不是在同等區域中類似存在,灰度演算法當中執行找到資料,人就可以精確識別,可能會遇到兩種情況,一種叫精確識別,一種叫模糊識別,模糊識別還要再進行分類

相關文章