Представьте простую библиотеку фильтров изображений 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 вы можете более подробно ознакомиться с введением.