圖片上傳壓縮預(yù)覽

這里的<img>標(biāo)簽是用來預(yù)覽圖片的:

<input id="upload" type="file" accept="image/*">
<img id="image" src="" alt="" />

讀取上傳文件:

let upload = document.querySelector('#upload');
let image = document.querySelector('#image');
let img = new Image();
let base64 = "";
upload.addEventListener('change', function (e) {
    let file = e.target.files[0];
    let reader = new FileReader();
    reader.onload = function (e) {
        let result = e.target.result;
        img.src = result;
        //壓縮
        img.onload = compress;
    };
    reader.readAsDataURL(file);
});

利用canvas進(jìn)行圖片的壓縮:

function compress() {
    let canvas = document.createElement('canvas');
    let context = canvas.getContext('2d');
    let width = img.width;
    let height = img.height;
    //如果圖片大于四百萬像素,計(jì)算壓縮比并將大小壓至400萬以下
    let ratio;
    if ((ratio = width * height / 4000000) > 1) {
        ratio = Math.sqrt(ratio);
        width /= ratio;
        height /= ratio;
    } else {
        ratio = 1;
    }
    canvas.width = width;
    canvas.height = height;
    context.fillStyle = "#fff";
    context.fillRect(0, 0, canvas.width, canvas.height);
    context.drawImage(img, 0, 0, width, height);
    base64 = canvas.toDataURL('image/jpeg', 0.1);
    //圖片預(yù)覽
    image.src = base64;
}

我們比較兩張圖片壓縮前后的區(qū)別:

compare.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 參考1-HTML5實(shí)現(xiàn)圖片壓縮上傳功能參考2-移動前端—圖片壓縮上傳實(shí)踐參考3-移動端H5圖片壓縮上傳 大體步驟 ...
  • 一、圖片預(yù)覽 圖片預(yù)覽有兩種方式: 用 FileReader把圖片轉(zhuǎn)化為base64格式的數(shù)據(jù)嵌入到HTML中。 ...
    Lxylona閱讀 2,933評論 0 4
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,806評論 1 45
  • 我好累啊,真的。 今天是入學(xué)的第二個(gè)月了,從未覺得生活如此痛苦。知道成績了,盡管是全班排前的,但這并不是我想要...
    農(nóng)場的魚閱讀 356評論 0 0
  • 策劃死亡 楊一在策劃一場死亡。 如果順利的話,她可以成功在二十歲...
    陳不爭_閱讀 1,023評論 1 1

友情鏈接更多精彩內(nèi)容