Содержание
Обработка изображений — сложная задача, которую нужно выполнять в Javascript, поэтому, если вы хотите обеспечить беспроблемное использование манипуляций и обработки изображений, вы выберете lwip среди других библиотек обработки изображений, доступных для node.js (например, скудный, модуль обработки изображений, написанный на чистом javascript), потому что lwip использует собственный модуль, написанный на C ++, который сделает обработку изображений быстрой и плавной.
Модуль lwip предоставляет широкие, быстрые и простые возможности обработки и обработки изображений. Нет никаких внешних зависимостей времени выполнения, что означает, что вам не нужно ничего устанавливать в вашей системе.
Поддерживаемые форматы
Расшифровка (чтение):
- JPEG, 1 3 канала (оттенки серого RGB).
- PNG, прозрачность поддерживается.
- GIF, прозрачность поддерживается. Можно читать анимированные GIF-файлы, но будет получен только первый кадр.
Кодировка (запись):
- JPEG, 3 канала (RGB).
- PNG (без потерь), 3 канала (RGB) или 4 канала (RGBA).
- GIF (без анимации)
В этой статье вы узнаете, как легко установить и использовать модуль lwip в вашем проекте node.js за пару минут.
1. Установите узел-гип глобально
Тебе понадобиться Узел-мошенник чтобы использовать модуль lwip. Продолжите установку node-gyp в качестве глобальной переменной в командной строке узла, выполнив следующую команду:
npm install -g node-gyp
node-gyp — это кроссплатформенный инструмент командной строки, написанный на Node.js для компиляции собственных дополнительных модулей для Node.js. Он объединяет проект gyp, используемый командой Chromium, и избавляет от необходимости сталкиваться с различными различиями в сборочных платформах.
2. Установка необходимых инструментов
Для работы с lwip нам понадобятся следующие инструменты, доступные в системе:
- Visual C ++ Build Environment.
- Python v2.7.x , Версии v3.x не поддерживаются node-gyp.
Вариант 1: Автоматическая установка
Выполните следующую команду в командной строке узла (запустить от имени администратора):
npm install --global --production windows-build-tools
Этот модуль установит Python 2.7 и компилятор Visual Studio C ++. Установка может занять некоторое время, однако упростит процесс установки.
Вариант 2: Ручная установка
Перейти в раздел загрузок в официальный сайт Python и скачать самый последний установщик 2.7.x и продолжайте установку, как вы это делаете с любым установщиком. Не забудьте добавить python в переменную окружения, выбрав опцию в настройке.
Если у вас есть другая версия Python (т.е. v3), вы можете определить, какая версия Python используется для node-gyp, установив ‘--python
переменная:
node-gyp --python /path/to/python2.7
Если node-gyp вызывается с помощью npm, и у вас установлено несколько версий Python, тогда вы можете установить в ключе конфигурации npm ‘python’ соответствующее значение:
npm config set python /path/to/executable/python2.7
Теперь, когда у вас есть Python, нам нужна только среда сборки Visual C ++. Это может быть установлено Настройка среды сборки Visual C ++ здесь или установка Visual Studio 2015 (или измените существующую установку) и выберите Общие инструменты для Visual C ++ во время установки. Это также работает с бесплатными выпусками Community и Express for Desktop.
После завершения установки среды Visual C ++ Build выполните следующую команду в командной строке узла, чтобы установить версию 2015 для Visual Studio в конфигурации:
npm config set msvs_version 2015
И ты готов к работе. Если вышеуказанные шаги не сработали, пожалуйста, посетите Руководство Microsoft по Node.js для Windows за дополнительные советы.
3. Установите lwip в проект
Теперь, когда у нас есть все необходимые инструменты для компиляции собственного модуля lwip, мы можем начать его использовать, поэтому, наконец, приступим к установке модуля, выполнив следующую команду в командной строке узла:
npm install lwip
Начнется загрузка модуля, и он немедленно запустит процесс сборки (который может занять некоторое время). Чтобы проверить, все ли мы сделали правильно, мы будем манипулировать следующим изображением (image.jpg
):
И небольшой скрипт для управления им с помощью lwip в node.js (index.js
):
var lwip = require('lwip');
lwip.open('image.jpg', function(err, image){
// check err...
// define a batch of manipulations and save to disk as JPEG:
image.batch()
.scale(0.75) // scale to 75%
.rotate(45, 'white') // rotate 45degs clockwise (white fill)
.writeFile('output.jpg', function(err){
if(err){
console.log(err);
}
});
});
Сохраните код в файле js (в данном случае index.js) и протестируйте скрипт, используя:
node index.js
Предыдущий скрипт должен создать изображение (ouput.jpg) со следующим изображением:
Все операции являются асинхронными, и обработка происходит в пуле потоков, управляемом libuv, который является частью NodeJS. Этот пул потоков отделен от цикла событий, используемого для обработки HTTP-запросов, поэтому использование lwip не должно существенно влиять на обработку HTTP-запросов веб-приложением. Однако пул потоков используется совместно с другими собственными потоковыми модулями, такими как те, которые обеспечивают ввод-вывод базы данных и файловой системы.
Размер пула потоков по умолчанию 4 подойдет для большинства приложений. Однако, если ваше приложение регулярно обрабатывает много изображений одновременно, и вы хотите в полной мере использовать преимущества многоядерной системы или предотвратить тяжелую работу по обработке изображений из-за задержки ввода-вывода базы данных или файловой системы, вы можете увеличить размер пула потоков, установив UV_THREADPOOL_SIZE
переменная среды для процесса NodeJS, например:
UV_THREADPOOL_SIZE=8 node index.js
4. Используйте lwip
Все операции выполняются на image
объект. image
объект может быть получен путем:
- Открытие существующего файла изображения или буфера с помощью
open
метод. - Создание нового объекта изображения с
create
метод. - Клонирование существующего объекта изображения с
image.clone
метод. - Извлечение подизображения из существующего объекта изображения с
image.extract
метод.
Здесь вы найдете несколько примеров странных задач, которые вы можете решить с помощью lwip:
Создание изображения
Создание изображения удобно, если вы хотите взять изображение в качестве холста, на котором будет отображаться или изменяться больше изображений и т. Д. Третий параметр предоставляет цвет холста, по умолчанию прозрачный.
var lwip = require('lwip');
lwip.create(500, 500, 'yellow', function(err, image){
image.writeFile('myimage.jpg', function(err){
if(err){
console.log(err);
}
});
});
Предыдущий фрагмент создаст изображение (квадрат) размером 500x500px с желтым фоном.
Экспорт изображения в base64
Вы можете извлечь содержимое base64 изображения, преобразовав буфер в строку.
var lwip = require('lwip');
lwip.create(300, 300, 'yellow', function(err, image){
image.toBuffer('png', function(err,buffer) {
var base64data = buffer.toString('base64');
var finalBase64String = 'data:image/png;base64,' + base64data;
console.log(finalBase64String);
});
});
Обратите внимание, что буфер будет предоставлять простые данные base64, поэтому, если вы хотите предоставить строку base64, которая может отображаться непосредственно в браузере, вам необходимо добавить «встроенный формат».
Манипулирование изображениями base64
Вы можете манипулировать изображениями из формата base64 непосредственно в lwip, не создавая статический файл. Вместо этого создайте новый экземпляр Buffer с данными Base64 на нем (не забудьте удалить ненужные данные, буфер ожидает простое содержимое base64 или файл будет поврежден).
var lwip = require('lwip');
var base64String = "data:image/jpeg;base64,qweqwe.......";
var encondedImageBuffer = new Buffer(base64String.replace(/^data:image\/(png|gif|jpeg);base64,/,''), 'base64');
lwip.open(encondedImageBuffer, 'jpg', function(err, image){
// check err...
// define a batch of manipulations and save to disk as JPEG:
image.batch().writeFile('myimage.jpg', function(err){
if(err){
console.log(err);
}
});
});
Вы можете прочитать больше примеров и документации библиотеки в официальный репозиторий или же область использования файла readme.
Повеселись !