Представьте простую библиотеку фильтров изображений nodejs. Когда я разрабатывал проект обработки изображений на стороне сервера, в nodejs не было библиотеки фильтров изображений. Итак, я решил заняться саморазвитием.

Вот результат.



Установка

Вы можете установить с помощью NPM (менеджер пакетов узла).

$ npm install node-image-filter --save

Простое использование

Вы помните только использование функции рендеринга.

render(imagePath, filter[, options], callback);

Вы можете использовать предустановленные фильтры или пользовательские фильтры. функция обратного вызова получает данные результата. Данные содержат информацию о буфере изображения, типе, ширине, высоте. Давайте посмотрим на пример.

const Filter = require('node-image-filter');

// express
app.use(function (req, res, next) {

    let imagePath = path.join(__dirname, '../samples/cat.jpg');

    Filter.render(imagePath, Filter.preset.invert, function (result) {
        /* result format
        {
            data : stream,
            type : 'jpg',
            width : 1024,
            height : 768
        }
        */
        result.data.pipe(fs.createWriteStream(`result.${result.type}`));
 // save local
        res.send('save filtered image');
    })
});

Предустановленные фильтры

‘node-image-filter’ включает предустановленные фильтры. Всего в настоящее время существует четыре фильтра. Вам просто нужно передать его как второй параметр функции Render.

const Filter = require('node-image-filter');

// filter list
Filter.preset.invert
Filter.preset.grayscale
Filter.preset.sepia
Filter.preset.brightness

Пользовательский фильтр

Вы также можете использовать свои собственные фильтры. Передайте созданный вами фильтр вторым параметром. Функция фильтра принимает пиксели в качестве параметра и должна обрабатывать эти пиксели.данные и возвращать.

// custom filter
let CustomInvertFilter = function (pixels) {
    var data = pixels.data;
    for(let i=0; i<data.length; i+=4 ){
        data[i] = 255 - data[i];
        data[i+1] = 255 - data[i+1];
        data[i+2] = 255 - data[i+2];
        data[i+3] = 255;
    }
    return data;
};

Filter.render(imagePath, CustomInvertFilter, function (result) {
    result.data.pipe(fs.createWriteStream(`result.${result.type}`)); // save local
    res.send('save filtered image');
})

свертка

Вы также можете использовать теорию свертки, такую ​​​​как sobel, sharpen и другие. Вот несколько примеров.

// sobel
Filter.render(imagePath, Filter.preset.sobel, function (result) {
    result.data.pipe(fs.createWriteStream(`result.${result.type}`)); // save local
    res.send('save filtered image');
})

// sharpen
Filter.render(imagePath, Filter.preset.sharpen, function (result) {
    result.data.pipe(fs.createWriteStream(`result.${result.type}`)); // save local
    res.send('save filtered image');
})

// blur
let options = {
    value : 100
};

Filter.render(imagePath, Filter.preset.blur, options, function (result) {
    result.data.pipe(fs.createWriteStream(`result.${result.type}`)); // save local
    res.send('save filtered image');
})

Спасибо за чтение !

В репозитории GHB вы можете более подробно ознакомиться с введением.