使用node.js实现图片压缩
生活随笔
收集整理的這篇文章主要介紹了
使用node.js实现图片压缩
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 images模塊介紹
處理圖片往往會遇到圖片壓縮的問題,使用Windows系統自帶的畫圖軟件或者其它圖像處理軟件一般都能夠實現圖片的壓縮,但是只能是單張處理,如果涉及到大批量的圖片壓縮的話,一張一張處理起來會相當麻煩。因此,可以考慮編寫程序實現批量處理。node.js中提供了圖片處理模塊,比如gm、imagemin、images模塊等。
本文中使用的是Node.js輕量級跨平臺圖像編解碼庫——images
1.1 安裝
安裝images模塊
npm install images1.2 API接口
images(file) //從指定文件加載并解碼圖像images(width, height) //創建一個指定寬高的透明圖像images(buffer[, start[, end]]) //從Buffer數據中解碼圖像images(image[, x, y, width, height]) //從另一個圖像中復制區域來創建圖像.fill(red, green, blue[, alpha]) //eg:images(200, 100).fill(0xff, 0x00, 0x00, 0.5) Fill image with color //以指定顏色填充圖像.draw(image, x, y) //在當前圖像( x , y )上繪制 image 圖像.encode(type[, config]) //eg:images("input.png").encode("jpg", {operation:50}) Encode image to buffer, config is image setting. //以指定格式編碼當前圖像到Buffer,config為圖片設置,目前支持設置JPG圖像質量Return buffer //返回填充好的Buffer。注意:該操作將會切斷調用鏈.save(file[, type[, config]]) //eg:images("input.png").encode("output.jpg", {operation:50}) Encoding and save the current image to a file, if the type is not specified, type well be automatically determined according to the file, config is image setting. eg: { operation:50 } //編碼并保存當前圖像到 file ,如果type未指定,則根據 file 自動判斷文件類型,config為圖片設置,目前支持設置JPG圖像質量.size([width[, height]]) //獲取或者設置圖像寬高,如果height未指定,則根據當前寬高等比縮放.resize(width[, height]) //設置圖像寬高,如果height未指定,則根據當前寬高等比縮放, 默認采用 bicubic 算法。.width([width]) //獲取或設置圖像寬度.height([height]) //獲取或設置圖像高度images.setLimit(width, height) //設置庫處理圖片的大小限制,設置后對所有新的操作生效(如果超限則拋出異常)images.setGCThreshold(value) //設置圖像處理庫自動gc的閾值(當新增內存使用超過該閾值時,執行垃圾回收)images.getUsedMemory() //得到圖像處理庫占用的內存大小(單位為字節)images.gc() //強制調用V8的垃圾回收機制1.3 接口示例
node-images 提供了類似jQuery的鏈式調用API,可以像下面這樣調用:
var images = require("images");images("input.jpg") //Load image from file //加載圖像文件.size(400) //Geometric scaling the image to 400 pixels width//等比縮放圖像到400像素寬.draw(images("logo.png"), 10, 10) //Drawn logo at coordinates (10,10)//在(10,10)處繪制Logo.save("output.jpg", { //Save the image to a file, with the quality of 50quality : 50 //保存圖片到文件,圖片質量為50});2 使用images模塊實現圖片批量壓縮
要使用代碼操作實現圖片壓縮處理,首先要明確思路:首先要有文件輸入,然后處理,最后保存輸出。而在node.js中就會涉及到文件系統(fs 模塊)。在這里,我們只需要使用fs 模塊獲取到所有的目標圖像的存放路徑以及文件名,然后傳遞給images模塊,在images模塊中實現圖像打開,壓縮,保存的操作。具體代碼如下所示:
var images = require("images"); var fs = require("fs"); var path = "test"; console.log(path); function explorer(path){fs.readdir(path, function(err, files){//err 為錯誤 , files 文件名列表包含文件夾與文件if(err){console.log('error:\n' + err);return;}files.forEach(function(file){fs.stat(path + '/' + file, function(err, stat){if(err){console.log(err); return;}if(stat.isDirectory()){ // 如果是文件夾遍歷explorer(path + '/' + file);}else{// 讀出所有的文件console.log('文件名:' + path + '/' + file);var name = path + '/' + file;var outName = path + '/' +'another_'+fileimages(name).save(outName, { //Save the image to a file,whih quality 50quality : 60 //保存圖片到文件,圖片質量為50});} });});}); } explorer(path);3 fs模塊簡要說明
上述案例中主要用到了fs模塊中的fs.readdir()方法和fs.stat()方法。下面主要介紹一下這兩種方法的使用:
3.1 讀取目錄fs.readdir()
用法:fs.readdir(path, callback)
參數:
- path - 文件路徑。
- callback - 回調函數,回調函數帶有兩個參數err, files,err 為錯誤信息,files 為 目錄下的文件數組列表。
3.2 獲取文件信息fs.stat()
用法:fs.stat(path, callback)
參數:
- path - 文件路徑。
- callback - 回調函數,回調函數帶有兩個參數如:(err, stats), stats 是 fs.Stats 對象。
fs.stat(path)執行后,會將stats類的實例返回給其回調函數。可以通過stats類中的提供方法判斷文件的相關屬性。例如判斷是否為文件:
stats類中的方法有:
| stats.isFile() | 如果是文件返回 true,否則返回 false。 |
| stats.isDirectory() | 如果是目錄返回 true,否則返回 false。 |
| stats.isBlockDevice() | 如果是塊設備返回 true,否則返回 false。 |
| stats.isCharacterDevice() | 如果是字符設備返回 true,否則返回 false。 |
| stats.isSymbolicLink() | 如果是軟鏈接返回 true,否則返回 false。 |
| stats.isFIFO() | 如果是FIFO,返回true,否則返回 false。FIFO是UNIX中的一種特殊類型的命令管道。 |
| stats.isSocket() | 如果是 Socket 返回 true,否則返回 false。 |
總結
以上是生活随笔為你收集整理的使用node.js实现图片压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 廖雪峰的官方网站Python教程练习题
- 下一篇: 两行轨道根数norad_极客历史记录的本