Генерация QR-кодов на Node.js: библиотеки qrcode и qr-image
QR-коды стали неотъемлемой частью современных веб-приложений: от ссылок на сайты и авторизации до передачи контактных данных и платежной информации. В экосистеме Node.js существует несколько зрелых библиотек, которые позволяют генерировать QR-коды без сторонних API и тяжелых графических редакторов. В этой статье мы подробно рассмотрим две самые популярные: qrcode и qr-image. Вы узнаете, как установить каждую, какие форматы вывода они поддерживают, и получите готовые примеры кода для интеграции в свой проект.
1. Библиотека qrcode — универсальный генератор
qrcode — это мощная библиотека с поддержкой JavaScript, TypeScript и даже браузеров. Она позволяет генерировать QR-коды в форматах PNG, SVG, canvas и даже в виде простого текста. Главное преимущество — детальная настройка: вы можете менять цвета, уровень коррекции ошибок, добавлять логотипы и управлять отступами.
Установка
npm install qrcode
Базовый пример: создание PNG-изображения
const QRCode = require('qrcode');
// Простая строка для кодирования
const data = 'https://pythonlib.ru';
QRCode.toFile('qrcode.png', data, {
color: {
dark: '#000000', // цвет модулей (квадратов)
light: '#FFFFFF' // цвет фона
},
errorCorrectionLevel: 'H' // максимальная коррекция ошибок
}, function (err) {
if (err) throw err;
console.log('QR-код сохранен как qrcode.png');
});
Генерация SVG (векторный формат)
const QRCode = require('qrcode');
QRCode.toString('https://pythonlib.ru', {
type: 'svg',
color: {
dark: '#2c3e50',
light: '#ecf0f1'
}
}, function (err, svgString) {
if (err) throw err;
console.log(svgString); // вывод SVG-разметки в консоль
});
Генерация в буфер (для отправки через HTTP)
const QRCode = require('qrcode');
QRCode.toBuffer('https://pythonlib.ru', {
type: 'png',
width: 400,
margin: 2
}, function (err, buffer) {
if (err) throw err;
// buffer — это Buffer объект, который можно отправить как ответ HTTP
// res.setHeader('Content-Type', 'image/png');
// res.send(buffer);
});
2. Библиотека qr-image — легковесная альтернатива
qr-image — минималистичная библиотека без лишних зависимостей. Она ориентирована на быструю генерацию PNG, SVG, EPS и даже PDF (через установку дополнительного модуля). Если вам не нужны сложные настройки цвета и логотипы, qr-image станет отличным выбором.
Установка
npm install qr-image
Пример: создание PNG-изображения
const qr = require('qr-image');
const fs = require('fs');
const data = 'https://pythonlib.ru';
const qr_png = qr.image(data, { type: 'png', size: 10 });
qr_png.pipe(fs.createWriteStream('qr-image.png'));
console.log('QR-код сохранен как qr-image.png');
Генерация SVG
const qr = require('qr-image');
const fs = require('fs');
const data = 'https://pythonlib.ru';
const qr_svg = qr.image(data, { type: 'svg', size: 10 });
qr_svg.pipe(fs.createWriteStream('qr-image.svg'));
console.log('QR-код сохранен как qr-image.svg');
Получение строки SVG без сохранения в файл
const qr = require('qr-image');
const data = 'https://pythonlib.ru';
const svgString = qr.imageSync(data, { type: 'svg' });
console.log(svgString); // готовая SVG-разметка
3. Сравнение библиотек
- qrcode — больше настроек (цвет, отступы, коррекция ошибок, логотип), поддержка TypeScript, промисов и async/await. Лучше подходит для продакшн-проектов, где нужны кастомные цвета и высокая надежность.
- qr-image — легковесная (менее 50 КБ), простая в использовании, поддерживает EPS и PDF. Идеальна для быстрых прототипов или когда не требуется детальная кастомизация.