摘要:壓縮圖片桌面應(yīng)用基于制作一個(gè)壓縮圖片的桌面應(yīng)用下載地址項(xiàng)目源碼準(zhǔn)備工作我們來整理一下我們需要做什么壓縮圖片模塊獲取文件路徑桌面應(yīng)用生成壓縮圖片我們需要使用這個(gè)庫來壓縮圖片,這里我們把這個(gè)庫封裝成壓縮模塊。
壓縮圖片桌面應(yīng)用imagemin-electron
基于electron制作一個(gè)node壓縮圖片的桌面應(yīng)用
下載地址:https://github.com/zenoslin/imagemin-electron/releases
項(xiàng)目源碼Github:https://github.com/zenoslin/imagemin-electron
準(zhǔn)備工作我們來整理一下我們需要做什么:
壓縮圖片模塊
獲取文件路徑
桌面應(yīng)用生成
壓縮圖片我們需要使用imagemin這個(gè)庫來壓縮圖片,這里我們把這個(gè)庫封裝成壓縮模塊。
const imagemin = require("imagemin") const imageminMozjpeg = require("imagemin-mozjpeg") const imageminPngquant = require("imagemin-pngquant") const imageminGifsicle = require("imagemin-gifsicle") async function compass(input, output, opts, callback) { let log = await imageminCompass(input, output, opts) callback(log) } async function imageminCompass(input, output = "temp", opts = {}) { input = (typeof input == "string") ? [input] : input; return await imagemin(input, output, { use: [ imageminMozjpeg(opts), imageminPngquant(opts), imageminGifsicle({ optimizationLevel:3 }) ] }) .then(file => { return { status: true, data: file }; }) .catch(e => { console.log(e); return { status: false, error: e.toString() } }); } module.exports = { compass: compass };獲取文件路徑
在我的理解中,electron用的是一個(gè)mini版的chrome瀏覽器,然后幫我們實(shí)現(xiàn)了瀏覽器跟系統(tǒng)(win & mac)交互的的許多api接口。
我們可以通過正常寫網(wǎng)頁的方式進(jìn)行開發(fā),當(dāng)需要進(jìn)行與系統(tǒng)交互的操作時(shí),我們只需要在我們網(wǎng)頁中的js進(jìn)程(這里應(yīng)該叫做這個(gè)桌面應(yīng)用的渲染進(jìn)程)拋出一個(gè)事件,然后在electron的主進(jìn)程進(jìn)行監(jiān)聽,收到事件后調(diào)用相應(yīng)的api接口,結(jié)果再反過來用事件的方式拋給渲染進(jìn)程。
electron的安裝和學(xué)習(xí)可以上官網(wǎng)https://electronjs.org/進(jìn)行學(xué)習(xí)。
ps:這里有一個(gè)electron的坑說一下,electron和jquery存在沖突,所以直接用script標(biāo)簽引入會(huì)失敗,在windows對(duì)象中找不到jQuery對(duì)象。這里我們可以加這么一句解決。
回到正題,首先我們?cè)?b>index.html中增加一個(gè)按鈕來打開系統(tǒng)的路徑選擇器。
在渲染進(jìn)程renderer.js中,監(jiān)聽按鈕的點(diǎn)擊,以及監(jiān)聽主線程返回的事件。
const {ipcRenderer} = require("electron") const inputBtn = document.getElementById("input-btn") inputBtn.addEventListener("click", (event) => { console.log("點(diǎn)擊輸入按鈕") ipcRenderer.send("open-file-dialog-input") }) ipcRenderer.on("input-path", (event, path) => { console.log(`收到完成信息 ${path}`) _inputPath = path inputPath.value = `${path}` })
在主進(jìn)程main.js中,監(jiān)聽渲染進(jìn)程拋出的事件,并調(diào)用api接口后放回結(jié)果。
ipcMain.on("open-file-dialog-input", (event) => { dialog.showOpenDialog({ properties: ["openFile", "openDirectory"] }, (files) => { if (files) { console.log("發(fā)出完成信息") event.sender.send("input-path", files) } }) })
這樣我們完成了使用系統(tǒng)api接口選擇路徑的功能。但其實(shí)我們實(shí)際的使用場(chǎng)景中路徑選擇器的方式并不是特別的方便,所以我們實(shí)現(xiàn)另一個(gè)功能。
拖動(dòng)將文件或者文件夾拖入網(wǎng)頁中,獲取到對(duì)應(yīng)的路徑。這里使用了js+div實(shí)現(xiàn)了這個(gè)功能。
index.html
renderer.js
const holder = document.getElementById("holder") holder.ondragenter = holder.ondragover = (event) => { event.preventDefault() holder.className = "jumbotron holder-ondrag" } holder.ondragleave = (event) => { event.preventDefault() holder.className = "jumbotron holder" } holder.ondrop = (event) => { // 調(diào)用 preventDefault() 來避免瀏覽器對(duì)數(shù)據(jù)的默認(rèn)處理 //(drop 事件的默認(rèn)行為是以鏈接形式打開 event.preventDefault() holder.className = "jumbotron holder" var file = event.dataTransfer.files[0] _inputPath = inputPath.value = file.path }
將我們獲取到的文件路徑傳入前面編寫的壓縮文件模塊,這樣我們就可以完成了圖片的壓縮。
桌面應(yīng)用生成最后,我們利用electron-packager完成對(duì)electron桌面應(yīng)用的打包。
//mac electron-packager . --out=out --platform=mas --arch=x64 //win electron-packager . --platform=win32 --arch=x64
ps:在非Windows主機(jī)平臺(tái)上進(jìn)行打包,需要安裝Wine 1.6或更高版本
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/108935.html
摘要:基于的桌面程序制作本文章將要講述怎么將,,結(jié)合起來,當(dāng)中的結(jié)合很簡(jiǎn)單,主要是與的結(jié)合還有與配合以及熱加載的配置有一個(gè)我自己做的也許會(huì)幫助到你步驟首先我們需要建立一個(gè)新的文件夾然后我們初始化一個(gè),將一下代碼復(fù)制進(jìn)剛才創(chuàng)建的中 基于electron-react-redux的桌面程序制作 本文章將要講述怎么將electron,react,redux結(jié)合起來,當(dāng)中react+redux的結(jié)合很...
摘要:本文主要講解的入門。可以幫助我們管理包的下載依賴部署發(fā)布等??梢哉J(rèn)為是中的。后續(xù)使用中,全部替換為即可。命令根據(jù)它,自動(dòng)下載所需模塊用于創(chuàng)建窗口和處理系統(tǒng)事件安裝包的位置。 Electron是什么 可以認(rèn)為Electron是一種運(yùn)行環(huán)境庫,我們可以基于此,用HTML、JS和CSS寫桌面應(yīng)用。PC端的UI交互,主要有web應(yīng)用和桌面應(yīng)用。具體采用哪種方式,主要看系統(tǒng)的應(yīng)用場(chǎng)景,哪個(gè)更合適...
摘要:是什么是基于和擴(kuò)展出來的一套基礎(chǔ)的應(yīng)用框架,目的是為了快速的搭建炫酷的桌面應(yīng)用,其實(shí)也算不上框架只是一種解決方案而已,讓后來的開發(fā)者在少采坑的情況下搭建出相對(duì)漂亮而快速的應(yīng)用為什么要做這個(gè)公司的有個(gè)項(xiàng)目使用搭建的,最開始只是套了個(gè)網(wǎng)頁 electron-ui是什么 electron-ui是基于electron和electron-vue擴(kuò)展出來的一套基礎(chǔ)的應(yīng)用框架,目的是為了快速的搭建炫...
摘要:在考慮宇航員的生命安全時(shí),輕微的打嗝或者服務(wù)中斷都會(huì)釀成生死事故。也許最大的挑戰(zhàn)來自谷歌主導(dǎo)的簡(jiǎn)稱。在最近的開發(fā)者峰會(huì),以及今年的會(huì)議上,谷歌都為安排了大量討論。由微軟提供,是廣受歡迎的編輯器,到月份已經(jīng)獲得了超過五百萬用戶。 譯者:安冬 (滬江Web前端開發(fā)工程師)本文原創(chuàng)翻譯,轉(zhuǎn)載請(qǐng)注明作者及出處。原文地址:http://developer.telerik.com/... 技術(shù)世界...
摘要:很好,前端任務(wù)又來了,開發(fā)過程中踩了不少坑,一個(gè)缺點(diǎn)就是體積大。切入正題,通過對(duì)的一些了解,業(yè)余時(shí)間通過搭建了一個(gè)網(wǎng)易云音樂客戶端,因?yàn)闀r(shí)間關(guān)系只做了客戶端的核心部分,有時(shí)間更新,這個(gè)項(xiàng)目會(huì)堅(jiān)持做下去。 前言 就在兩個(gè)月前公司需求快速開發(fā)一款桌面應(yīng)用軟件,嗯,快速。 并且提供了技術(shù)方案Nwjs,起初不知道這款框架的存在,網(wǎng)上查找了一波,發(fā)現(xiàn)更牛逼的一款快速搭建桌面應(yīng)用的框架,那么它就是...
閱讀 3841·2021-11-23 09:51
閱讀 4629·2021-11-15 11:37
閱讀 3603·2021-09-02 15:21
閱讀 2804·2021-09-01 10:31
閱讀 938·2021-08-31 14:19
閱讀 918·2021-08-11 11:20
閱讀 3372·2021-07-30 15:30
閱讀 1759·2019-08-30 15:54