亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Canvas?drawImage方法實(shí)現(xiàn)圖片壓縮詳解

 更新時(shí)間:2022年11月18日 09:07:30   作者:zkj  
這篇文章主要為大家介紹了Canvas?drawImage方法實(shí)現(xiàn)圖片壓縮詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

圖片壓縮原理

  • CanvasRenderingContext2D.drawImage() 方法可以從頁(yè)面 DOM 元素作為圖像源來(lái)根據(jù)坐標(biāo)和大小重新繪制該圖像。
  • HTMLCanvasElement.toDataURL() 和 HTMLCanvasElement.toBlob() 方法支持導(dǎo)出為 base64 字符串或 Blob 對(duì)象。

CanvasRenderingContext2D.drawImage()

drawImage(image, dx, dy)
drawImage(image, dx, dy, dWidth, dHeight)
drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
  • image
    • 繪制到上下文的元素。允許任何的畫布圖像源,包括 canvas、img、svg、video 元素和 ImageBitmap 對(duì)象等。
  • dx, dy, dWidth, dHeight
    • 這幾個(gè)屬性表示在 canvas 畫布上指定一片區(qū)域用來(lái)放置圖片,dx、dy 指定圖片左上角在 canvas 上的坐標(biāo),dWidth、dHeight 指定圖片在 canvas 上繪制的區(qū)域?qū)捀?。如果沒有指定 sx、sy、sWidth、sHeight 這4個(gè)參數(shù),則圖片會(huì)被拉伸或縮放在 canvas 區(qū)域內(nèi)。
  • sx, sy, swidth, sheight
    • 這幾個(gè)屬性是針對(duì)圖片元素的,表示圖片在 canvas 畫布上顯示的大小和位置。sx、sy 表示圖片上作為左上角的坐標(biāo),然后往右下角 swidth、sheight 尺寸范圍圖片作為最終在 canvas 上顯示的圖片內(nèi)容。

圖片壓縮,需要使用的是 CanvasRenderingContext2D.drawImage() 5個(gè)參數(shù)的語(yǔ)法,即指定圖片左上角在 canvas 上的坐標(biāo)為 0,圖片在 canvas 上繪制的區(qū)域?qū)捀邽?canvas 的寬高即可。例如,圖片的原始尺寸是 4000*3000,現(xiàn)在要把尺寸限制為 400*300 大小。

const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
canvas.width = 400;
canvas.height = 300;
context.drawImage(img,0,0,canvas.width,canvas.height);

如果需要將轉(zhuǎn)換后的圖像渲染到頁(yè)面 DOM 元素,可以使用 HTMLCanvasElement.toDataURL() 方法來(lái)獲取轉(zhuǎn)換后的圖像 base64 格式信息的字符串傳遞給 img 元素的 src?;蚴褂?HTMLCanvasElement.toBlob() 方法獲取 Blob 格式的對(duì)象,然后使用 URL.createObjectURL() 獲取對(duì)象 URL 傳遞給 img 元素的 src。也可以將該 base64 字符串或 Blob 對(duì)象上傳到后端服務(wù)器。

HTMLCanvasElement.toDataURL()

該方法將圖片轉(zhuǎn)換成 base64 格式信息的字符串表示法。

toDataURL()
toDataURL(type)
toDataURL(type, encoderOptions)
  • type 可選
    • 圖片格式,默認(rèn)為 image/png。file 對(duì)象中的 file.type 屬性可以傳到此參數(shù)。
  • encoderOptions 可選
    • 在指定圖片格式為 image/jpeg 或 image/webp 時(shí),可以從 0 到 1 的區(qū)間內(nèi)選擇圖片的質(zhì)量。如果超出取值范圍,將會(huì)使用默認(rèn)值 0.92。其他參數(shù)會(huì)被忽略。

HTMLCanvasElement.toBlob()

  • 比 HTMLCanvasElement.toDataURL() 方法多了一個(gè) callback 參數(shù),其他參數(shù)相同。
  • 無(wú)返回值。
  • 該方法是異步的,所以需要在 callback 回調(diào)方法中處理轉(zhuǎn)換結(jié)果,回調(diào)參數(shù)是轉(zhuǎn)換好的包含 canvas 畫布上的圖像的 Blob 對(duì)象,如果圖像未被成功創(chuàng)建,可能會(huì)獲得 null 值。
toBlob(callback)
toBlob(callback, type)
toBlob(callback, type, quality)

示例

下面原始圖片的大小為 84867 字節(jié)(大約 83KB),壓縮后大小僅為 16354 字節(jié)(約 16KB)。

(async function() {
  const {size, type} = await fetch(img.src).then(res=>res.blob());
  result.textContent += JSON.stringify({size, type});
  const canvas = document.createElement('canvas');
  const context = canvas.getContext('2d');
  canvas.width = 400;
  canvas.height = 300;
  context.drawImage(img,0,0,400,300);
  img2.src = canvas.toDataURL(type);
  canvas.toBlob(({size, type}) => result2.textContent += JSON.stringify({size, type}), type);
})()

以上就是Canvas drawImage方法實(shí)現(xiàn)圖片壓縮詳解的詳細(xì)內(nèi)容,更多關(guān)于Canvas drawImage 壓縮圖片的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論