nodejs環境下的圖片壓縮、base64轉行等

 項目開發常用方法,記錄一下,以備參考:

const fs        = require("fs");
const images    = require("images");

    /**
     * 圖片壓縮
     * @param {*} srcPath  原圖片路徑
     * @param {*} outPath  新圖片保存路徑
     * @param {*} width    新圖片像素寬度
     * @param {*} quality  新圖片質量係數
     */
    function compressImage(srcPath, outPath, width, quality) {
        images(srcPath)
        .size(width || 1024)
        .save(outPath, {
            quality: quality || 50
        });
    },

    /**
     * 文件轉base64字符串
     * @param {*} filePath
     */
    function fileToBase64(filePath) {
        try {
            return images(filePath).size(width || 1024).encode('jpg', { quality: quality || 50 }).toString("base64");
        } catch (error) {
            return "";
        }
    }

    /**
     * base64字符串轉文件
     * @param {*} base64Str 
     * @param {*} filePath 
     */
    function Base64ToFile(base64Str, filePath) {
        var dataBuffer = new Buffer(base64Str, 'base64');
        fs.writeFile(filePath, dataBuffer, function (err) {
            if (err) {
                console.log("base64 to file error")
            } else {
                console.log("base64 to file success")
            }
        });
    }

    /**
     * 遍歷文件夾壓縮文件
     * @param {*} root 
     * @param {*} width 
     * @param {*} quality 
     * @param {*} task 
     */
    function compressFile (root, width, quality, task) {
        try {
            var pa = fs.readdirSync(root);
            pa.forEach(function (ele, index) {
                var name = root + "\\" + ele;
                var info = fs.statSync(name)
                if (info.isDirectory()) {
                    tools.compressFile(name, width, quality, task);
                } else {
                    var fn = ele.split('.');
                    var nm = root + "\\" + fn[0] + '_x.jpg';
                    task.push(function (callback) {
                        var buff = images(name).size(width || 1024).encode('jpg', {
                                quality: quality || 50
                            });
                        fs.writeFile(nm, buff, function (err) {
                            if (err) {
                                console.log("base64 to file error")
                            } else {
                                console.log("base64 to file success")
                            }
                        });
                    });
                }
            })
        } catch (error) {
            return "";
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章