2015-02-24 175 views
0

當我在瀏覽器中上傳某個文件時,文件類型爲jpeg,文件大小爲2MB,但是當我使用canvas.toDataURL()將文件編碼爲base64時,生成的文件的大小約爲9MB。toDataURL()文件大小增加

爲什麼base64編碼文件比原始文件大3-4倍?

我已經看到,我可以指定一個選項toDataURl(type, quality),但我不能將它用於png文件,僅用於jpeg,而我想要一個png。

+1

因爲64小於256. – rightfold 2015-02-24 16:05:40

+2

要重申,base64意味着原始文件的每個字節都存儲在三個字節的ASCII文本中。因此,它的設計大了3倍。這很有用,因爲base64的每個字節都是URL安全的,而大多數字節通常不是。 – 2015-02-24 16:11:00

+0

它不是3倍大,它是大三分之一。這是因爲一個典型的字節被編碼爲8位('2^8 == 256'),而Base64編碼的字符只能保存6位('2^6 == 64')。一個明顯的例子是:'btoa('你好我的朋友...;)')。length(** 32 **)對''你好我的朋友...;)'。length'(** 24 **)。這裏的問題是你從一個jpeg文件開始並進入png。 Jpeg有損壓縮,PNG無損(它是原始BMP文件的1/4)。 – Pluto 2015-02-24 16:57:00

回答

0

Bade-64只會(並且總是)將二進制表示法放大33%。這是因爲三個八位字節分佈在四個字節中,因此這些字節的值可以表示爲可打印的ASCII字符,因此是安全的。

最終大小由需要編碼的二進制數組確定。此外,還會有一個預編碼數據的幾個字節的uri頭。

PNG文件沒有損失,並且往往比JPEG大(但並非所有情況下)。預計我們將不得不在獨立於使用PNG文件的Base-64編碼時處理更大的文件。由於PNG使用gzip壓縮圖像數據,因此PNG也具有可變壓縮,但不幸的是,我們無法通過上下文方法訪問它。

+0

謝謝大家的回覆,我不知道你發佈的所有信息 – simon 2015-02-25 09:14:11