JS圖片壓縮詳解

隨著Web應用需求的增加,圖片壓縮變得越來越重要。在Web應用中,圖片的大小會直接影響用戶瀏覽網頁的速度,同時更小的圖片可以減少伺服器存儲空間和傳輸帶寬,提高網頁的載入速度和用戶體驗。本文將從多個方面對JS圖片壓縮做詳細的闡述。

一、JS圖片壓縮流程

JS圖片壓縮的流程通常包括以下幾個步驟:

  1. 讀取圖片文件,獲取圖片的base64編碼或二進位數據。
  2. 解碼圖片數據,轉換為可以操作的像素數據。
  3. 將像素數據進行操作,如壓縮、裁剪、旋轉等。
  4. 將處理後的像素數據編碼為圖片格式,如JPEG、PNG等。
  5. 將編碼後的圖片數據輸出或存儲到本地或伺服器。

二、JS圖片壓縮到指定大小

JS可以將圖片壓縮到指定的文件大小,以便在Web應用中更好地控制圖片的大小。下面是一個示例代碼:

// 壓縮圖片到指定大小並輸出
function compress(imgData, size) {
  var maxSize = size * 1024; // 轉換為位元組
  var quality = 1; // 初始質量為1
  var compressedData = imgData; // 初始壓縮數據為原始數據
  while (compressedData.length > maxSize && quality > 0) {
    quality -= 0.05; // 降低質量
    compressedData = Canvas2Image.saveAsJPEG(canvas, true, quality).src;
  }
  return compressedData; // 返回壓縮後的圖片數據
}

以上代碼中,imgData為輸入的圖片數據,size為目標文件大小(單位為KB),canvas為Canvas對象,Canvas2Image.saveAsJPEG()為一個Canvas轉換為JPEG的工具函數,true表示使用base64編碼。

三、JS圖片壓縮方法

JS圖片壓縮的方法有很多,其中比較常用的有:

  1. 使用Canvas進行壓縮
  2. 使用FileReader獲取圖片數據並壓縮
  3. 使用第三方庫,如JSZip、pako等

Canvas壓縮的思路就是先將圖片數據繪製到Canvas上,然後再使用Canvas2Image等庫將Canvas轉換為JPEG、PNG等格式。

FileReader方式則是使用JavaScript提供的FileReader API獲取圖片文件,然後使用Canvas等方式進行壓縮處理。

四、JS圖片壓縮演算法

JS圖片壓縮的演算法也有很多,根據不同的場景可以選擇不同的演算法:

  1. 質量壓縮:根據JPEG、PNG等圖片格式的編碼規則,減少圖片數據中重複和無用的信息,以降低圖片質量和文件大小。
  2. 尺寸壓縮:對圖片進行縮放或裁剪,使得圖片尺寸變小,從而降低文件大小。
  3. 色彩壓縮:對於JPEG格式,可以通過減少色彩深度和壓縮色彩空間來降低文件大小。
  4. 其他演算法:如哈夫曼編碼、離散餘弦變換等。

五、JS圖片壓縮裁剪

JS可以對圖片進行裁剪,以減少圖片的大小。以下是一個示例裁剪圖片並壓縮的代碼:

// 裁剪圖片並壓縮
function cropAndCompress(src, x, y, width, height, quality) {
  var img = new Image();
  img.src = src;
  img.onload = function() {
    var canvas = document.createElement('canvas');
    var ctx = canvas.getContext('2d');
    canvas.width = width;
    canvas.height = height;
    ctx.drawImage(img, x, y, width, height, 0, 0, width, height);
    var compressedData = Canvas2Image.saveAsJPEG(canvas, true, quality).src;
    console.log('compressedData', compressedData);
  };
}

以上代碼中,src為輸入圖片的URL,xywidthheight分別為裁剪的起始位置和大小,quality為輸出JPEG文件的質量。

六、JS圖片壓縮到200K

以下是一個將圖片壓縮到指定大小的示例代碼:

// 壓縮圖片到指定大小
function compressTo200K(imgData) {
  var maxSize = 200 * 1024; // 目標文件大小
  var quality = 1; // 初始質量為1
  var compressedData = imgData; // 初始壓縮數據為原始數據
  while (compressedData.length > maxSize && quality > 0) {
    quality -= 0.05; // 降低質量
    compressedData = Canvas2Image.saveAsJPEG(canvas, true, quality).src; // 使用Canvas轉換為JPEG格式
  }
  console.log('compressedData', compressedData);
}

以上代碼中,imgData為輸入的圖片數據,canvas為Canvas對象,Canvas2Image.saveAsJPEG()為一個Canvas轉換為JPEG的工具函數,true表示使用base64編碼。

七、JS圖片壓縮軟體

除了前面介紹的JS方法,還有一些JS圖片壓縮軟體可供選擇,如:J-I-CPica等。

八、壓縮圖片

JS可以對圖片進行多種方式的壓縮,具體要依據場景選擇不同的方法。以下是一個綜合壓縮的示例代碼:

// 壓縮圖片
function compressImage(src, size) {
  var img = new Image();
  img.src = src;
  img.onload = function() {
    // 獲取原始圖片的像素數據
    var canvas = document.createElement('canvas');
    var ctx = canvas.getContext('2d');
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage(img, 0, 0);
    var imgData = canvas.toDataURL().replace(/^data:image\/(png|jpeg);base64,/, '');

    // 壓縮圖片到指定大小
    var maxSize = size * 1024; // 轉換為位元組
    var quality = 1; // 初始質量為1
    var compressedData = imgData; // 初始壓縮數據為原始數據
    while (compressedData.length > maxSize && quality > 0) {
      quality -= 0.05; // 降低質量
      compressedData = Canvas2Image.saveAsJPEG(canvas, true, quality).src;
    }

    // 在瀏覽器中顯示壓縮後的圖片
    var compressedImg = new Image();
    compressedImg.src = 'data:image/jpeg;base64,' + compressedData;
    document.body.appendChild(compressedImg);
  };
}

以上代碼中,src為輸入圖片的URL,size為目標文件大小(單位為KB),canvas為Canvas對象,Canvas2Image.saveAsJPEG()為一個Canvas轉換為JPEG的工具函數,true表示使用base64編碼。

九、JS文件壓縮

除了圖片壓縮,JS還可以用於文件壓縮,常用的壓縮庫有:zip.jsJSZip等。

以下是一個使用JSZip壓縮文件的示例代碼:

// 壓縮文件
function compressFile(file) {
  var zip = new JSZip();
  zip.file(file.name, file);
  zip.generateAsync({type:"blob"})
    .then(function(blob) {
      // 下載壓縮後的文件
      var a = document.createElement('a');
      a.href = URL.createObjectURL(blob);
      a.download = file.name + '.zip';
      a.click();
    }, function(err) {
      console.log('error', err);
    });
}

以上代碼中,file為輸入文件對象,JSZip為JS文件壓縮庫,generateAsync()為生成壓縮文件數據的非同步方法,使用type: "blob"表示生成二進位數據。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/256958.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:43
下一篇 2024-12-15 12:43

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • 用Python繪製酷炫圖片

    在本篇文章中,我們將展示如何使用Python繪製酷炫的圖片。 一、安裝Python繪圖庫 在使用Python繪製圖片之前,我們需要先安裝Python繪圖庫。Python有很多繪圖庫…

    編程 2025-04-29
  • 使用axios獲取返回圖片

    使用axios獲取返回圖片是Web開發中很常見的需求。本文將介紹如何使用axios獲取返回圖片,並從多個方面進行詳細闡述。 一、安裝axios 使用axios獲取返回圖片前,首先需…

    編程 2025-04-29
  • Python 圖片轉表格

    本文將詳細介紹如何使用Python將圖片轉為表格。大家平時在處理一些資料的時候難免會遇到圖片轉表格的需求。比如從PDF文檔中提取表格等場景。當然,這個功能也可以通過手動複製、粘貼,…

    編程 2025-04-29
  • Python緩存圖片的處理方式

    本文將從多個方面詳細闡述Python緩存圖片的處理方式,包括緩存原理、緩存框架、緩存策略、緩存更新和緩存清除等方面。 一、緩存原理 緩存是一種提高應用程序性能的技術,在網路應用中流…

    編程 2025-04-29
  • Python如何抓取圖片數據

    Python是一門強大的編程語言,能夠輕鬆地進行各種數據抓取與處理。抓取圖片數據是一個非常常見的需求。在這篇文章中,我們將從多個方面介紹Python如何抓取圖片數據。 一、使用ur…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • Avue中如何按照後端返回的鏈接顯示圖片

    Avue是一款基於Vue.js、Element-ui等技術棧的可視化開發框架,能夠輕鬆搭建前端頁面。在開發中,我們使用到的圖片通常都是存儲在後端伺服器上的,那麼如何使用Avue來展…

    編程 2025-04-28
  • Python利用Image加圖片的方法

    在Python中,利用Image庫可以快速處理圖片,並加入需要的圖片,本文將從多個方面詳細闡述這個操作。 一、Image庫的安裝和基礎操作 首先,我們需要在Python中安裝Ima…

    編程 2025-04-28

發表回復

登錄後才能評論