php 圖片用base64轉碼完的文本比以前還大 是為什麼?
我用base64將50張 4.11 MB (4,318,294 位元組) 的圖片 轉碼成文本流
轉碼後的文本大小為5.56 MB (5,831,775 位元組)
願意是網站圖片太多 想用後台傳64碼 前台H5畫的方式提速 結果卻相反
為什麼會比原來還大?
題主對 base64 提速的理解有嚴重偏差
圖片 base64 的目的不是減小其大小,而是嵌入在網頁中,以此避免瀏覽器再去對圖片發送另一個單獨的請求的開銷。在 Keep-Alive 如此普及的 2017 年,這個開銷主要在於多次請求和響應的時產生的延遲。
對於 4.11MB 的圖片來說,這個延遲可以忽略不計,而題主也發現了 base64 編碼的弊端:嚴重增加網頁文件的大小,導致發送正文時間太長……
當然會變大……………base64又不是壓縮演算法
Base64 - Wikipedia
Base64不是壓縮演算法,編碼成Base64反而會使數據變大約33%。
編碼成它其實就是把每3位元組轉成4個「文本位元組」,結尾不滿3再另外處理一下。
它的意義在於編碼後字元只會是[a-zA-Z0-9+-],可以作為普通文本傳輸,或者引號包起來。
你的目的是傳圖片,也可以直接二進位傳輸,那當然是直接傳就好了。
base64編碼前和編碼後大概是3:4的比例,所以不變大變小的話那就太神奇了。base64主要的用途是把不可見的ascii字元映射到到成可見的ascii字元內,而後者是前者真子集,所以不變大就怪了。
這個是正常的,使用base64並不是為了減少文本大小,而是減少http請求。
base64是每六位轉換成一個可見字元,8位。所以體積會乘 4/3 。
1. base64本身不是壓縮演算法,而且為了可讀性,其最終生成的字元串肯定比圖片大。
2. 圖片轉成base64一般也只會用於整個頁面需要前端緩存到localstore時的一種變通時的做法
Base64最重要的是其可讀性,是有特殊的用途的,比如存資料庫之類。早期的一些論壇的用戶頭像是存資料庫的,當然現在都漸漸轉出了。而目前常見的圖片格式就已經是經過壓縮的了,直接傳2進位即可。也可以使用各種巨頭都在推的更具性價比的圖片格式比如webp之類。
base64本身就是放大的演算法……用64個符號表示信息和128個符號表示信息……顯然前者所需要表示同等信息的數據量就大了……
一般來說轉化我會轉化後使用Ajax提交,返回鏈接,這樣對用戶的體驗來說是比較好的。
推薦閱讀:
※有哪些 不錯的PHP代碼樣例可以參考?
※用1年的時間下定決心學習 PHP 能設計一個豆瓣網出來么?
※PHP對象賦值給變數的兩種方式的區別,一般賦值和引用賦值?
※如何評價2017年6月10日-11日 DevLink.cn 在北京舉辦的第三屆PHP全球開發者大會?
※有人說,熟練掌握了 if 和 while,就等於掌握了 PHP 語言,這句話有道理嗎?為什麼?
TAG:PHP開發 |
