亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > HTML > 正文

使用canvas壓縮圖片大小的方法示例

2024-08-26 00:21:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

問(wèn)題來(lái)源

這個(gè)問(wèn)題,源于上傳圖片文件的時(shí)候,后臺(tái)限制了2MB的大小,but在調(diào)起相機(jī)拍照的時(shí)候分分鐘超過(guò)了2MB,為了不影響用戶體驗(yàn)和功能需求,需要前端對(duì)大小進(jìn)行壓縮,然后傳到后臺(tái)。

思路分析

找了很多資料,發(fā)現(xiàn)只有canvas可以對(duì)圖片進(jìn)行壓縮處理。

原理大概就是: 1、先將圖片的file文件轉(zhuǎn)成baseURL 2、創(chuàng)建一個(gè)image標(biāo)簽去接收文件獲取圖片的寬高和比例。 3、創(chuàng)建canvas畫(huà)布設(shè)置畫(huà)布的大小。 4、將圖片繪制到canvas上面。 5、對(duì)canvas進(jìn)行壓縮處理,獲得新的baseURL 6、將baseURL轉(zhuǎn)化回文件。

前提的函數(shù)

將file文件轉(zhuǎn)化為base64

/*** @param {二進(jìn)制文件流} file * @param {回調(diào)函數(shù),返回base64} fn */function changeFileToBaseURL(file,fn){  // 創(chuàng)建讀取文件對(duì)象      var fileReader = new FileReader();      //如果file沒(méi)定義返回null      if(file == undefined) return fn(null);      // 讀取file文件,得到的結(jié)果為base64位      fileReader.readAsDataURL(file);      fileReader.onload = function(){        // 把讀取到的base64        var imgBase64Data = this.result;        fn(imgBase64Data);      }    }

將base64轉(zhuǎn)化為文件流

/** * 將base64轉(zhuǎn)換為文件 * @param {baseURL} dataurl  * @param {文件名稱} filename  * @return {文件二進(jìn)制流}*/function dataURLtoFile(dataurl, filename) {    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);    while(n--){        u8arr[n] = bstr.charCodeAt(n);    }    return new File([u8arr], filename, {type:mime}); }

壓縮方法

/*** canvas壓縮圖片* @param {參數(shù)obj} param * @param {文件二進(jìn)制流} param.file 必傳* @param {目標(biāo)壓縮大小} param.targetSize 不傳初始賦值-1* @param {輸出圖片寬度} param.width 不傳初始賦值-1,等比縮放不用傳高度* @param {輸出圖片名稱} param.fileName 不傳初始賦值image* @param {壓縮圖片程度} param.quality 不傳初始賦值0.92。值范圍0~1* @param {回調(diào)函數(shù)} param.succ 必傳*/function pressImg(param){  //如果沒(méi)有回調(diào)函數(shù)就不執(zhí)行  if(param && param.succ){     //如果file沒(méi)定義返回null     if(param.file == undefined) return param.succ(null);     //給參數(shù)附初始值     param.targetSize = param.hasOwnProperty("targetSize") ? param.targetSize : -1;     param.width = param.hasOwnProperty("width") ? param.width : -1;     param.fileName = param.hasOwnProperty("fileName") ? param.fileName: "image";     param.quality = param.hasOwnProperty("quality") ? param.quality : 0.92;     var _this = this;     // 得到文件類型     var fileType = param.file.type;     // console.log(fileType) //image/jpeg     if(fileType.indexOf("image") == -1){       console.log('請(qǐng)選擇圖片文件^_^');       return param.succ(null);     }     //如果當(dāng)前size比目標(biāo)size小,直接輸出     var size = param.file.size;     if(param.targetSize > size){       return param.succ(param.file);     }     // 讀取file文件,得到的結(jié)果為base64位     changeFileToBaseURL(param.file,function(base64){       if(base64){         var image = new Image();         image.src = base64;         image.onload = function(){           // 獲得長(zhǎng)寬比例           var scale = this.width / this.height;           // console.log(scale);           //創(chuàng)建一個(gè)canvas           var canvas = document.createElement('canvas');           //獲取上下文           var context = canvas.getContext('2d');           //獲取壓縮后的圖片寬度,如果width為-1,默認(rèn)原圖寬度           canvas.width = param.width == -1 ? this.width : param.width;           //獲取壓縮后的圖片高度,如果width為-1,默認(rèn)原圖高度           canvas.height = param.width == -1 ? this.height : parseInt(param.width / scale);           //把圖片繪制到canvas上面           context.drawImage(image, 0, 0, canvas.width, canvas.height);           //壓縮圖片,獲取到新的base64Url           var newImageData = canvas.toDataURL(fileType,param.quality);           //將base64轉(zhuǎn)化成文件流           var resultFile = dataURLtoFile(newImageData,param.fileName);           //判斷如果targetSize有限制且壓縮后的圖片大小比目標(biāo)大小大,就彈出錯(cuò)誤           if(param.targetSize != -1 && param.targetSize < resultFile.size){             console.log("圖片上傳尺寸太大,請(qǐng)重新上傳^_^");             param.succ(null);           }else{             //返回文件流             param.succ(resultFile);           }         }       }     });   } }

方法使用

文件的size是按照字節(jié),所以我們需要把要求的大小轉(zhuǎn)化成字節(jié)。 1字節(jié)就是1byte就是1B,1KB = 1024B,1MB = 1024 * 1024B

<input type="file" id="fileImg" class="fileImg"/>
// 圖片文件上傳獲取url$("#fileImg").on('change',function(){   pressImg({     file:this.files[0],     targetSize:2 * 1024 * 1024,     quality:0.5,     width:600,     succ:function(resultFile){         //如果不是null就是壓縮成功         if(resultFile){           //TODO        }     }  })});

問(wèn)題總結(jié)

 圖片壓縮程度

圖片的壓縮程度不太好確定,所以可以進(jìn)行多次嘗試,根據(jù)需求方的要求進(jìn)行調(diào)整。 改變目標(biāo)圖片的大小和清晰度都可以改變圖片的壓縮程度。

本來(lái)想做一個(gè)壓縮圖片的遞歸,直到圖片大小符合期望

后來(lái)發(fā)現(xiàn)

  • 如果目標(biāo)大小比較小,圖片如何進(jìn)行壓縮都不能滿足條件的時(shí)候,會(huì)造成循環(huán)無(wú)法跳出,浪費(fèi)資源。
  • 如果圖片進(jìn)行幾次壓縮之后,文件大小不會(huì)改變了,有的時(shí)候還會(huì)增加,奇奇怪怪。 所以就放棄了遞歸。

ios拍攝方向問(wèn)題

因?yàn)閕os調(diào)起系統(tǒng)相機(jī)拍照是逆時(shí)針旋轉(zhuǎn)了90度。 而在我壓縮圖片之后傳到后臺(tái),發(fā)現(xiàn)圖片的exif信息的拍攝方向丟失,導(dǎo)致ios上傳的圖片都是逆時(shí)針旋轉(zhuǎn)了90度。這個(gè)問(wèn)題安卓不曾發(fā)現(xiàn)。

 

 
canvas,壓縮圖片

 

目前有些懷疑,是base64轉(zhuǎn)化成file文件的時(shí)候,丟失的。 之后驗(yàn)證后會(huì)在這里進(jìn)行補(bǔ)充說(shuō)明。

@version1.0——2019-8-2——創(chuàng)建《使用canvas壓縮圖片大小》

©burning_韻七七

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到HTML教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
污污内射在线观看一区二区少妇| 一区二区在线中文字幕电影视频| 亚洲片区在线| 永久免费看片在线播放| 五月天亚洲一区| 久久伊人免费视频| 成人免费高清视频在线观看| 欧美4khd| 亚洲大片一区二区三区| 92福利视频午夜1000合集在线观看| 国产真实的和子乱拍在线观看| 黄色小说在线观看视频| 国产高清av片| 青青视频在线观| 最新91视频| 日本韩国在线视频爽| 亚洲色图欧美色| 日韩欧美性视频| 久久蜜桃香蕉精品一区二区三区| 亚洲成av人片乱码色午夜| 国产精品午夜春色av| 亚洲网站在线免费观看| 韩国av一区二区三区在线观看| 一本色道久久综合亚洲91| 国产成人欧美在线观看| 69免费视频| 中文字幕日韩三级片| 精品无码av在线| 欧美成人三级伦在线观看| 精品国产免费一区二区三区四区| 资源网第一页久久久| 91社在线播放| 国产精品不卡| 麻豆视频在线免费看| 国产av麻豆mag剧集| 成人午夜伦理影院| 国产在线www| 亚洲免费视频一区二区三区| 日韩亚洲视频| h短视频大全在线观看| 亚洲无码精品一区二区三区| 欧美日产一区二区三区在线观看| 五月开心婷婷久久| 91精品国产综合久久久蜜臀图片| 国产精品视频一区二区三区综合| 一区二区三区色| 亚洲国产精品久久久久久| 天堂av一区二区三区在线播放| 国产精品欧美色图| 亚欧色一区w666天堂| 天天射狠狠干| 欧美18xxxx| 成人在线视频免费播放| 国产精品久久久久9999吃药| 熟妇高潮一区二区三区| 日韩av一区二区在线| 亚洲91视频| 亚洲一级大片| 偷拍中文亚洲欧美动漫| 亚洲国产天堂久久综合| 国产91视频在线| 国产69精品久久久久777| 日韩av不卡一区二区| 黄色大片在线观看| 亚洲精品九九| 欧美精品久久久久久久久| 高清亚洲高清| 久久久久一区| 中文字幕免费一区二区| 美女脱光内衣内裤视频久久网站| 中文字幕免费观看| 91免费看蜜桃| 偷拍自拍一区| 一级特黄免费视频| 蜜桃精品视频在线观看| 午夜激情视频在线播放| 欧美日韩国产成人高清视频| 精品成人在线| 在线免费观看成年人视频| 99久久精品久久亚洲精品| 欧美成人明星100排名| 一级黄色短视频| 国产午夜亚洲精品午夜鲁丝片| 国产 欧美 日韩 在线| 亚洲高清免费在线观看| 中文在线字幕免费观| 日韩伦理视频| 日韩一级免费| 尤物国产精品| 国产成人1区| 国产suv精品一区二区68| 人人在草线视频在线观看| 在线视频精品一区| av资源中文色综合| 真人做人试看60分钟免费| 国产一区二区三区三区在线观看| 亚洲va久久| 国产美女视频免费| 欧美91视频| 成人激情综合网| 在线天堂中文| 91网站黄www| 国内一卡2卡三卡四卡在线| 天堂网.www在线资源| 中文字幕不卡| 亚洲精品午夜在线观看| 色综合久久一区二区三区| 国产91色在线播放| 中文字幕第一页在线视频| 91九色国产ts另类人妖| 日韩高清在线观看一区二区| 精品国产乱码一区二区三区| 日本熟女一区二区| 国产日产高清欧美一区二区三区| 69久久夜色精品国产69| 国产精品一区二区三区av麻| 婷婷中文字幕在线观看| 亚洲v国产v欧美v久久久久久| 成人3d动漫一区二区三区91| 乱人伦xxxx国语对白| 蜜桃麻豆91| 性高爱久久久久久久久| 99精品免费在线观看| aaaaa级片| 成年在线播放小视频| 欧美日韩免费一区二区| 国产色无码精品视频国产| 日韩av毛片| 国产亚洲精品成人| 日韩欧美中文免费| 最近中文字幕mv第三季歌词| 欧美国产亚洲精品| 精品日韩一区二区三区免费视频| 日韩欧美黄色片| 国产成人免费在线观看视频| 亚洲国产精品小视频| 日韩视频一区二区三区| 怡红院在线播放| 肉色超薄丝袜脚交| 视频免费一区二区| 日韩在线不卡视频| 在线播放日本| 69视频免费看| 国产无遮挡又黄又爽又色视频| 韩国精品免费视频| 精品噜噜噜噜久久久久久久久试看| 私库av在线播放| 久久久精品免费视频| 波多野结衣在线免费观看| 色播五月激情五月| 国产精品免费久久久| 超碰在线观看免费版| 成人精品一二三区| 亚洲大胆人体在线| 久久久久国产免费免费| 国产精品视频在线免费观看| 日韩精品一区二区三区swag| 人人草在线视频| 精品国产不卡一区二区| 亚洲丶国产丶欧美一区二区三区| 精品无码一区二区三区爱欲| 国内精品免费在线观看| 中文在线资源观看网站视频免费不卡| 综合在线影院| 亚洲欧美色图区| 天天操天天干视频| 国产日韩欧美在线| 亚洲综合久久久久| 午夜国产福利在线观看| av免费中文字幕| 91在线三级| 精品国产髙清在线看国产毛片| 99久久精品国产网站| 在线国产91| 欧美成人性福生活免费看| 国产高清一区| 性生活视频网站| 国产精品老女人精品视频| 黄色春季福利在线看| 91免费版在线| 亚洲欧美日韩不卡一区二区三区| av成人在线网站| 禁网站在线观看免费视频| 亚洲精品720p| www.自拍偷拍| 精品国产乱码一区二区三区四区| 成人免费播放器| 国产一区二区三区高清播放| 日本aⅴ亚洲精品中文乱码| 亚洲精品国产精品国自产在线| 久久久www免费人成黑人精品| 亚洲综合激情视频| 日韩成人高清视频| 久久99精品网久久| 亚洲国产成人av好男人在线观看| 精品人妻少妇嫩草av无码| 亚洲成人av综合| 国产精品第一页在线| 日韩免费高清视频网站| 国产电影精品久久禁18| 丰满熟妇乱又伦| 中文字幕第12页| 狠狠干夜夜操| 永久www成人看片| av视屏在线播放| 国产精品人妖ts系列视频| 久久国产综合| 亚洲成人动漫精品| 亚洲色婷婷久久精品av蜜桃| 91视频免费观看网站| 69av一区二区三区| 麻豆国产尤物av尤物在线观看| 一区二区三区视频免费看| 亚洲精品高清视频| 亚洲综合视频在线观看| 国产精品免费精品一区| 国产精品久久久久久超碰| 黄页网址大全免费观看| 日日摸日日碰夜夜爽av| 91精品啪在线观看麻豆免费| 717影院理论午夜伦不卡久久| 亚洲欧洲免费视频| 国产伦精品一区二区三区视频孕妇| 日韩最新av在线| 亚洲深夜福利在线| 亚洲美女视频在线免费观看| 四虎永久在线| 亚洲制服av| 九色丨蝌蚪丨成人| 永久亚洲成a人片777777| 麻豆传媒视频在线观看| 欧美电影完整版在线观看| 91日本在线观看| 欧美高清一级片在线观看| 国产精品久久久久秋霞鲁丝| 91在线直播亚洲| 宅男噜噜噜66一区二区66| 国产精品主播一区二区| 欧美精品一区二区高清在线观看| ㊣最新国产の精品bt伙计久久| 色综合久久天天综合网| 黄色网页在线观看| 国产精品电影在线观看| 国产裸体美女永久免费无遮挡| 777久久精品一区二区三区无码| 亚洲成人自拍| 国产主播性色av福利精品一区| 免费的一级黄色片| 欧美一区二区三区婷婷月色| 国内精品伊人久久久久av一坑| 国产欧美va欧美va香蕉在线| 91久久久亚洲精品| av在线资源网| 亚洲午夜精品久久久久久浪潮| 国产视频在线免费观看| 国产乱人伦偷精品视频免下载| 五月婷婷欧美激情| 中文字幕在线日韩| 国产成人免费在线视频| 免费黄色大片| 天堂av2024| 中文字幕人成人乱码亚洲电影| 高端美女服务在线视频播放| 日韩一区二区在线看片| 资源av在线| 日韩精品不卡一区二区| 天天综合网91| 国产精品嫩草在线观看| 欧美色道久久88综合亚洲精品| 国产福利第一视频在线播放| 中文字幕中文字幕在线中高清免费版| 国产富婆一级全黄大片| 一本久久综合亚洲鲁鲁| 3d欧美精品动漫xxxx无尽| 看亚洲a级一级毛片| 免费欧美一级视频| 污视频免费在线观看网站| 国产主播精品在线| 欧美精品videossex少妇| 曰本三级日本三级日本三级| www.日韩.com| 欧美搞黄网站| japanese中文字幕| 白嫩亚洲一区二区三区| 麻豆国产在线| 91久久国产精品91久久性色| 福利一区在线| 影视一区二区三区| 毛片在线免费视频| 极品少妇xxxx偷拍精品少妇| 中日精品一色哟哟| 特级丰满少妇一级aaaa爱毛片| 香蕉视频1024| 中文字幕免费精品| 国产在线精品一区二区不卡| 久久久久一本一区二区青青蜜月| 麻豆免费在线| 91一区二区在线| 99久久精品免费看| 美女毛片在线观看| 国产精品一级黄片| 欧美专区视频| 91精品国产91久久久久久吃药| 亚洲国产日韩在线一区模特| 国内精品免费在线观看| 国产不卡在线一区| 婷婷四月色综合| 六月丁香综合网| 亚洲精品白浆| 九色porny自拍视频在线播放| 日韩小视频网址| 久久精品一区二区| 亚洲一区二区欧美| 亚洲视频在线一区观看| 国产精品第56页| 怡春院在线视频| 国产精品色在线观看| chinese偷拍一区二区三区| 韩国视频一区二区| 日本私人网站在线观看| 久久福利毛片| 免费的很黄很污的视频网站| 天堂色在线视频| 午夜精品www| 国产丝袜在线视频| 日本黄色一级网站| 色综合五月天导航| 人妻熟人中文字幕一区二区|