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

首頁(yè) > 開(kāi)發(fā) > HTML5 > 正文

淺析圖片上傳及canvas壓縮的流程

2024-09-05 07:23:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

我們通常在做圖片上傳的時(shí)候都會(huì)遇上這樣的情況,一是后端接口限制上傳圖片的大小,或者是即使后端沒(méi)有限制大小,因?yàn)閳D片太大在前端渲染時(shí)太慢,造成頁(yè)面加載體驗(yàn)較差。因此我們很有必要對(duì)上傳的圖片進(jìn)行壓縮。

本文在gitthub做了收錄:github.com/Michael-lzg…

本文主要包括以下流程:

  • 用戶通過(guò)input框選擇圖片
  • 使用FileReader進(jìn)行圖片預(yù)覽
  • 將圖片繪制到canvas畫布上
  • 使用canvas畫布的能力進(jìn)行圖片壓縮
  • 將壓縮后的Base64(DataURL)格式的數(shù)據(jù)轉(zhuǎn)換成Blob對(duì)象進(jìn)行上傳

Input 標(biāo)簽來(lái)獲取圖片

通過(guò)設(shè)置input標(biāo)簽的type屬性為file,來(lái)讓用戶可以選擇文件,設(shè)置accept限制選擇的文件類型,綁定onchange事件,來(lái)獲取確認(rèn)選擇后的文件

<input type="file" accept="image/*" onchange="loadFile(event)"

FileReader

FileReader是什么,我們先來(lái)看看官方文檔的介紹

FileReader 對(duì)象允許 Web 應(yīng)用程序異步讀取存儲(chǔ)在用戶計(jì)算機(jī)上的文件(或原始數(shù)據(jù)緩沖區(qū))的內(nèi)容,使用 File 或 Blob 對(duì)象指定要讀取的文件或數(shù)據(jù)。

FileReader常用的兩個(gè)方法如下:

  • FileReader.onload:處理load事件。即該鉤子在讀取操作完成時(shí)觸發(fā),通過(guò)該鉤子函數(shù)可以完成例如讀取完圖片后進(jìn)行預(yù)覽的操作,或讀取完圖片后對(duì)圖片內(nèi)容進(jìn)行二次處理等操作。
  • FileReader.readAsDataURL:讀取方法,并且讀取完成后,result屬性將返回Data URL格式(Base64 編碼)的字符串,代表圖片內(nèi)容。

在圖片上傳中,我們可以通過(guò)readAsDataURL()方法進(jìn)行了文件的讀取,并且通過(guò)result屬性拿到了圖片的Base64(DataURL)格式的數(shù)據(jù),然后通過(guò)該數(shù)據(jù)實(shí)現(xiàn)了圖片預(yù)覽的功能

<div class="container">  <input type="file" accept="image/*" onchange="loadFile(event)" /></div><script>  const loadFile = function (event) {    let file =  event.target.files[0]    const reader = new FileReader()    reader.onload = function () {      console.log(reader.result)      ...    }    reader.readAsDataURL(file)  }</script>

canvas 壓縮圖片

這是圖片上傳壓縮的核心所在,我們先使用CanvasRenderingContext2D.drawImage()方法將上傳的圖片文件在畫布上繪制出來(lái),再使用Canvas.toDataURL()將畫布上的圖片信息轉(zhuǎn)換成base64(DataURL)格式的數(shù)據(jù)。

drawImage()

drawImage()方法在畫布上繪制圖像、畫布或視頻。drawImage()方法也能夠繪制圖像的某些部分,以及/或者增加或減少圖像的尺寸。參數(shù)如下

  • img 規(guī)定要使用的圖像、畫布或視頻。
  • sx 可選。開(kāi)始剪切的 x 坐標(biāo)位置。
  • sy 可選。開(kāi)始剪切的 y 坐標(biāo)位置。
  • swidth 可選。被剪切圖像的寬度。
  • sheight 可選。被剪切圖像的高度。
  • x 在畫布上放置圖像的 x 坐標(biāo)位置。
  • y 在畫布上放置圖像的 y 坐標(biāo)位置。
  • width 可選。要使用的圖像的寬度。(伸展或縮小圖像)
  • height 可選。要使用的圖像的高度。(伸展或縮小圖像)
var cas = document.querySelector('canvas')var ctx = cas.getContext('2d')// 先創(chuàng)建圖片對(duì)象var img = new Image()img.src = './images/1.jpg'// 圖片加載完之后img.onload = function () {  ctx.drawImage(img, 206, 111, 32, 38, 100, 100, 32, 38)}

Canvas.toDataURl()

Canvas.toDataURl()方法可以將canvas畫布上的信息轉(zhuǎn)換為base64(DataURL)格式的圖像信息,純字符的圖片表示形式。該方法接收 2 個(gè)參數(shù):

  • mimeType(可選): 表示需要轉(zhuǎn)換的圖像的mimeType類型。默認(rèn)值是image/png,還可以是image/jpegimage/webp等。
  • quailty(可選):quality 表示轉(zhuǎn)換的圖片質(zhì)量。范圍是 0 到 1。圖片的mimeType需要是image/jpeg或者image/webp,其他mimeType值無(wú)效。默認(rèn)壓縮質(zhì)量是 0.92。
var canvas = document.createElement('canvas')canvas.toDataURL("image/jpeg" 0.8)

到這里,我們先來(lái)上 canvas 壓縮圖片的代碼

function compress(base64, quality, mimeType) {  let canvas = document.createElement('canvas')  let img = document.createElement('img')  img.crossOrigin = 'anonymous'  return new Promise((resolve, reject) => {    img.src = base64    img.onload = () => {      let targetWidth, targetHeight      if (img.width > MAX_WIDTH) {        targetWidth = MAX_WIDTH        targetHeight = (img.height * MAX_WIDTH) / img.width      } else {        targetWidth = img.width        targetHeight = img.height      }      canvas.width = targetWidth      canvas.height = targetHeight      let ctx = canvas.getContext('2d')      ctx.clearRect(0, 0, targetWidth, targetHeight) // 清除畫布      ctx.drawImage(img, 0, 0, canvas.width, canvas.height)      let imageData = canvas.toDataURL(mimeType, quality / 100)      resolve(imageData)    }  })}

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

  • 通過(guò)window.atobbase-64字符串解碼為binaryString(二進(jìn)制文本);
  • binaryString構(gòu)造為multipart/form-data格式;
  • Uint8Arraymultipart格式的二進(jìn)制文本轉(zhuǎn)換為ArrayBuffer。
function dataUrlToBlob(base64, mimeType) {  let bytes = window.atob(base64.split(',')[1])  let ab = new ArrayBuffer(bytes.length)  let ia = new Uint8Array(ab)  for (let i = 0; i < bytes.length; i++) {    ia[i] = bytes.charCodeAt(i)  }  return new Blob([ab], { type: mimeType })}

將圖片上傳到服務(wù)端

創(chuàng)建一個(gè)FormData,把blobappend 到FormData里面請(qǐng)求服務(wù)端接口,提交圖片

function uploadFile(url, blob) {  let formData = new FormData()  let request = new XMLHttpRequest()  formData.append('image', blob)  request.open('POST', url, true)  request.send(formData)}

ps:在實(shí)際開(kāi)發(fā)中,我們要不要把圖片轉(zhuǎn)化為FormData形式上傳到服務(wù)端,這就看具體的業(yè)務(wù)需要了。我們可以上圖片上傳到騰訊云,直接返回一個(gè)'https.xxx.jgp'的圖片 url 用于上傳。

到此這篇關(guān)于淺析圖片上傳及canvas壓縮的流程的文章就介紹到這了,更多相關(guān)圖片上傳canvas壓縮內(nèi)容請(qǐng)搜索武林網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持武林網(wǎng)!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
欧美日韩一区二区三区免费| 日韩专区在线| 国产精品少妇自拍| 久久精品视频在线| 日韩中文视频免费在线观看| 国产综合视频在线| 91丨porny丨在线中文| 欧美三日本三级少妇三99| 亚洲一区二区三区视频在线播放| 禁久久精品乱码| 亚洲色图国产精品| 另类小说第一页| 欧美日韩国产色视频| 99麻豆久久久国产精品免费优播| 亚洲精品一卡二卡三卡四卡| y97精品国产97久久久久久| 精品资源在线| 国产在线88av| 亚洲天堂免费电影| 91嫩草视频在线观看| 欧美最猛性xxxxxhd| 精品日产一区2区三区黄免费| 特级西西444www高清大视频| 97精品人妻一区二区三区蜜桃| 99免费视频| 2014亚洲片线观看视频免费| 国产精品久久久久久久久久久久久| 亚洲女与黑人做爰| 91成人免费电影| 羞羞的网站在线观看| 成人国产精品一区二区| 在线日韩精品视频| 久久天天做天天爱综合色| 国产做a爰片久久毛片| 亚洲综合国产激情另类一区| 五月天视频一区| 男女猛烈激情xx00免费视频| 日韩精品一区二区亚洲av| 久久久久久久999精品视频| 老司机精品视频一区二区| 亚洲一区三区视频在线观看| 日本v片在线高清不卡在线观看| 久久91亚洲| 波多野吉衣av| 精品免费一区二区| 天堂俺去俺来也www久久婷婷| 成人永久免费网站| 91精品欧美久久久久久动漫| 亚洲丁香日韩| 亚洲aⅴ乱码精品成人区| 国产精品中出一区二区三区| 中文在线аv在线| 国产美女福利在线观看| sm捆绑调教视频| 一区二区中文| 加勒比久久综合| 91亚洲精品在线观看| sese视频| 久久免费成人精品视频| 久久综合五月| 麻豆chinese极品少妇| 欧美日韩欧美一区二区| 丝袜+亚洲+另类+欧美+变态| ,一级淫片a看免费| 亚洲在线视频网站| 久久久不卡网国产精品一区| www.国产麻豆| 一区二区三区四区在线免费观看| 亚洲男人天堂2023| 午夜视频福利在线| 国产精品a久久久久久| 波多野结衣av在线| 成人久久精品视频| 成人一级片在线观看| 精品视频在线一区| 久久一日本道色综合久久| 亚洲日本中文字幕免费在线不卡| 精品国产av无码| 亚洲综合精品视频| 91社区国产高清| 亚洲综合区在线| 蜜桃视频在线观看91| 欧美日韩一区二区三区不卡视频| 日韩精选视频| 亚洲欧美日韩图片| 国产精品青草久久| 小h片在线观看| 91伊人久久| 午夜在线电影亚洲一区| 亚洲美女屁股眼交| 国产中文字字幕乱码无限| 天堂网中文在线| 尤物九九久久国产精品的分类| 九九热在线免费| 成人av在线播放网址| 品久久久久久久久久96高清| 天堂在线免费观看视频| 欧美俄罗斯乱妇| 色婷婷精品久久二区二区密| 久久久亚洲精品一区二区三区| 300部国产真实乱| 中文字幕一区二区三区四| 青青草国产成人99久久| 麻豆国产精品视频| 夜夜操天天干| 精品久久久在线观看| 欧美日韩1234| 久久久久久久久久网| 亚洲自拍第二页| 一区二区三区中文字幕在线观看| 香蕉521av成人网| 久久久久久久久成人| 日韩av一区二区三区| www.四虎精品| 天天槽夜夜槽| 亚洲欧美日韩精品久久久| 北岛玲heyzo一区二区| 日韩av在线播放网址| 92国产精品| 一区二区三区激情| 91精品婷婷国产综合久久| 91蜜桃视频在线观看| 欧美一区一区| 伊人色综合影院| swag国产精品一区二区| 欧美亚洲国产一区二区三区va| 日本一欧美一欧美一亚洲视频| 日本免费在线视频不卡一不卡二| 在线黄色网页| 激情小视频在线| 韩国中文免费在线视频| 成年人午夜免费视频| 丝袜视频国产在线播放| 特级丰满少妇一级| 97超视频免费观看| 日韩精品免费一区二区夜夜嗨| 制服国产精品| av黄色一级| 91玉足脚交白嫩脚丫在线播放| 欧美精品成人在线| 亚洲国产一区在线观看| 欧美日韩在线亚洲一区蜜芽| 欧美精品另类| 亚洲精品中文字幕有码专区| 国产探花在线免费观看| 先锋影音亚洲资源| 欧美丝袜丝nylons| 欧美成人免费在线视频| 国产一区高清视频| 玖玖玖电影综合影院| 国产综合色产| 激情黄产视频在线免费观看| 中文字幕欧美色图| av色影在线看免费| 久久久久五月天| 高清精品一区二区三区一区| 欧美自拍视频| 三级国产在线观看| www三级免费| 精品日本美女福利在线观看| 五月婷婷六月丁香激情| 国产精品免费久久久久| 久草在线中文888| 国产一区二区在线视频聊天| 激情婷婷久久| 亚洲国产高潮在线观看| 欧美极品日韩| 精品无人区一区二区三区竹菊| 在线观看中文字幕的网站| 伊人狠狠色丁香综合尤物| 91麻豆精品国产91久久久久| 国产三级精品三级| 真实乱视频国产免费观看| 一本色道久久88综合日韩精品| 亚洲精品第一国产综合野| 亚洲国产高清aⅴ视频| 国产成人精品白浆久久69| 99国产精品免费视频观看| 97国产在线观看| 日韩av影音先锋| 玖玖爱这里只有精品| 在线看你懂得| 色先锋影音岛国av资源| 亚洲系列另类av| 国产性猛交╳xxx乱大交| 国产视频第一页在线观看| 一区二区三区午夜探花| 华人av在线| 日韩av在线一区| 先锋资源中文字幕| 欧美日韩夜夜| 在线观看免费视频一区二区三区| 最全影音av资源中文字幕在线| 午夜免费福利在线观看| 欧美一区二区女人| 亚洲精品中文字幕有码专区| 精品欧美国产一区二区三区不卡| 欧美丰满嫩嫩电影| 久久精品视频国产| 欧美日韩亚洲综合一区二区三区激情在线| 91在线视频免费91| 蜜桃av噜噜一区二区三区小说| 国产精品亚洲综合久久| 国产真人真事毛片| 亲子乱一区二区三区电影| 免费萌白酱国产一区二区三区| 亚洲一区二区三区视频在线播放| 午夜精品一区二区三区在线视| 一夜七次郎国产精品亚洲| 国产高清免费av| 精品国产鲁一鲁****| www.亚洲国产| 激情视频一区| 五月天婷婷综合社区| 91超碰在线观看| 五月天亚洲精品| 国偷自产av一区二区三区| 在线观看福利一区| 欧美视频日韩视频在线观看| 国产91精品久久久久| 国产伦理一区二区三区| 99热国产精品| 欧洲熟妇精品视频| 比比资源先锋影音网| 99草在线视频| 黑人中文字幕一区二区三区| 一本色道久久综合狠狠躁篇的优点| 亚洲影视在线| japanese色系久久精品| 黄网址在线播放免费| 亚洲aaa精品| 日韩欧美色电影| 美女视频一区在线观看| 亚洲人成网站在线播放2019| 一级片在线观看| 欧美日韩高清影院| 国产伦理一区二区| 波多野结衣一区二区三区四区| 成年人网站国产| 欧美影院天天5g天天爽| 国产精品久久久久久久无码| 国产女主播一区二区三区| 中文字幕日韩在线视频| 国产成人无码一二三区视频| 日韩精品中午字幕| 亚洲91av视频| 国产亚洲欧美日韩在线观看一区二区| 成人影院一区二区三区| 欧美电影免费观看网站| 国产日韩视频在线播放| 日韩电影免费网址| 一个人看的www视频免费观看| www.亚洲.com| 国产亚洲精彩久久| 亚洲影院久久精品| 国产一区二区久久久| 欧美成人精品欧美一级乱黄| 夫妇交换中文字幕| 99久久婷婷国产综合精品电影| 日韩av免费观影| 中文在线永久免费观看| yw3121.龙物视频永不失联| 9191国语精品高清在线| 欧美日韩亚洲高清| 亚洲高清视频中文字幕| 亚洲国产另类av| 两女双腿交缠激烈磨豆腐| 狠狠色狠狠色综合网| 精品少妇一区| 欧美综合国产精品久久丁香| 欧美一区视频在线| 国内精品400部情侣激情| 成年免费插网| 中文字幕日产av一二三区| 亚洲黄页视频免费观看| 正在播放欧美视频| 四虎国产精品免费观看| 国产欧美日韩卡一| 亚洲一区二区影院| 一级片avav网址| 在线观看黄色av网站| 国产欧美一区二区三区久久人妖| 欧美96一区二区免费视频| 成人亚洲精品777777ww| 美女又爽又黄视频毛茸茸| 亚洲精品视频网上网址在线观看| 欧美福利视频网站| 国产精品成人一区二区三区夜夜夜| 99久久国产热无码精品免费| 国产精品成人午夜| 亚洲永久精品国产| 先锋资源久久| 成人激情久久| 丁香高清在线观看完整电影视频| 91精品久久久久久久99蜜桃| 精品999日本久久久影院| 亚洲成人精品电影在线观看| 天天av天天翘天天综合网色鬼国产| 日韩一区av| 国产黄色片免费观看| 网站一区二区三区| 日本精品入口免费视频| 在线毛片观看| 日韩乱码在线观看| 美女18一级毛片一品久道久久综合| 在线观看免费视频你懂的| 亚洲国产中文字幕在线观看| 91麻豆精品国产91久久久久推荐资源| 天天综合网 天天综合色| 911精品产国品一二三产区| 羞羞在线视频| 青青草原av在线播放| 日本成址在线观看| 日本色七七影院| 亚洲国产精品久久久久秋霞蜜臀| 黄色三级视屏| 日韩精品一区二区亚洲av性色| 自拍视频在线看| 嫩草www视频在线观看高清| 色偷偷久久人人79超碰人人澡| 亚洲精品卡一卡二| 欧美成人首页| 欧美性受极品xxxx喷水| 动漫一区二区三区| 国产亚洲成人精品| 国产鲁鲁视频在线观看免费| 2020欧美日韩在线视频| 喷白浆一区二区|