javascript - canvas壓縮圖片的原理是什么
問(wèn)題描述
canvas中的toDataURL方法可指定圖片壓縮后的格式及壓縮質(zhì)量,例如壓縮成webp格式:
canvas.toDataURL(’image/webp’,quality);
toDataURL是用base64對(duì)圖像進(jìn)行編碼的,且編碼后的源文件比編碼前大33%,參考地址,但是quality參數(shù)可以指定壓縮質(zhì)量,壓縮質(zhì)量越接近于0,圖片壓縮力度越大。
問(wèn)題1:采用base64編碼將圖片源文件變大了,那base64能壓縮圖片嗎?問(wèn)題2:用base64編碼小圖片只是為了減少http請(qǐng)求嗎?問(wèn)題3:canvas中的toDataURL方法壓縮圖片的原理是什么?quality參數(shù)具體做了什么?問(wèn)題解答
回答1:base64只是對(duì)圖片對(duì)應(yīng)的二進(jìn)制碼,按照六位對(duì)應(yīng)一個(gè)字符規(guī)則做轉(zhuǎn)換,轉(zhuǎn)碼后是反而比原圖片文件大的。但是對(duì)于小圖片而言,經(jīng)轉(zhuǎn)換后多出來(lái)的字節(jié)傳輸遠(yuǎn)比多建立一個(gè)http連接開銷小,所以會(huì)利用base64對(duì)小圖轉(zhuǎn)碼來(lái)提高頁(yè)面加載速度。至于圖片壓縮原理,簡(jiǎn)單來(lái)說(shuō),通過(guò)算法減少一張圖片上的顏色差異,犧牲圖片畫質(zhì)。比如緊挨著的顏色相近的四個(gè)像素的顏色信息壓縮前大概占16個(gè)字節(jié),壓縮后變成一個(gè)顏色就能減少近4倍。quality用來(lái)控制色差的力度,值越小力度越大,顏色相差較大的兩個(gè)像素也會(huì)被處理,自然被壓縮后文件就越小,畫質(zhì)就越爛
回答2:不行
是
控制圖片編碼格式的質(zhì)量,例如webp可以進(jìn)行有損壓縮,質(zhì)量越高,損失越小,文件體積就越大
相關(guān)文章:
1. MySQL數(shù)據(jù)庫(kù)中文亂碼的原因2. 如何解決Centos下Docker服務(wù)啟動(dòng)無(wú)響應(yīng),且輸入docker命令無(wú)響應(yīng)?3. mysql - 新浪微博中的關(guān)注功能是如何設(shè)計(jì)表結(jié)構(gòu)的?4. angular.js使用$resource服務(wù)把數(shù)據(jù)存入mongodb的問(wèn)題。5. dockerfile - [docker build image失敗- npm install]6. angular.js - 關(guān)于$apply()7. android-studio - Android Studio 運(yùn)行項(xiàng)目的時(shí)候一堆警告,跑步起來(lái)!?8. 我在centos容器里安裝docker,也就是在容器里安裝容器,報(bào)錯(cuò)了?9. angular.js - Ionic 集成crosswalk后生成的apk在android4.4.2上安裝失敗???10. nignx - docker內(nèi)nginx 80端口被占用
