首頁  >  文章  >  web前端  >  關於electron-vue圖片壓縮

關於electron-vue圖片壓縮

铁手
铁手原創
2021-07-19 19:20:291622瀏覽

最近用electron-vue(Electron :基於Chromium 和Node.js, 讓你可以使用HTML, CSS 和JavaScript 構建應用)擼了一個圖片壓縮的小軟體,平時工作還是需要用得到的,支援常用的圖片格式;

可以設定壓縮比例

1、支援設定固定寬高

2、支援固定寬或高(依原圖比例縮小)

3、支援等比例縮小

具體操作如下:

1、前端把圖片的路徑和保存壓縮後的路徑傳給後端,這個透過electron事件通訊就可以了

呼叫的是ipcRenderer.send事件,傳入一個事件名,後端用ipcRenderer.on接收即可,

這裡需要注意一下,我們使用ipcRenderer.once接收一次就可以,避免重複接收訊息。

具體參考如下程式碼:

await request('resize', this.form.imgPath , this.form.imgSavePath)
  request方法是对ipcRenderer.send做的一个封装
  async function request( event = '', ...params) {
  if (!event) {
    return
  }
  // 构造promise
  const reply = new Promise((resolve, reject) => {
    // 数据返回事件,事先约定
    const eventReply = `${event}-reply`
    ipcRenderer.once(eventReply, (event, data) => {
      resolve(data)
    })
  })
  // 触发事件
  ipcRenderer.send(event, ...params)
  // 返回promise
  return reply
}

2、後端剛開始考慮用image-size這個函式庫取得圖片的寬高;用法如下:只需要傳入圖片的路徑即可

const sizeOf = require('image-size')
 let dimensions = sizeOf(path)
  if(!dimensions){
    return
  }
  let width = dimensions.width
  let height = dimensions.height

測試後發現了一點小問題,就是偶爾出現獲取失敗的情況,既然有問題那就不能使用了。後面經查詢用這個probe-image-size庫是沒有問題的,使用方式如下:

const probe = require('probe-image-size');
 let dimensions = probe.sync(require('fs').readFileSync(path))
  if(!dimensions){
    return
  }
  let width = dimensions.width
  let height = dimensions.height

3、最後執行壓縮即可,傳入輸出圖片路徑和保存的寬高,調用resize-optimize -images這個函式庫,程式碼如下:

fs.readFile(path, function (err, originBuffer) {
    if (err) {
      return
    }
    output = output + `/${basename(path)}`
    fs.writeFile(output, originBuffer, async function (err) {
      if (err) {
        return
      }
      const options = {
        images: [output],
        width,
        height,
        quality: 95,
      }
      //执行压缩.
      await resizeOptimizeImages(options)
    })
  })

總結:

#以上就是在使用image-size過程中碰到的一點小問題,雖然沒有從根源解決問題,但也能從中學習到一些東西,有時候想要達到自己想要的功能就不能固定使用一種方式,需要學會變通,更重要的是要學會分析問題和解決問題。

更多請關注php中文網其它相關文章!

以上是關於electron-vue圖片壓縮的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn