Генерация QR-кодов на Node.js с помощью библиотеки qrcode
QR-коды стали неотъемлемой частью современного веба: от ссылок на Wi-Fi до подтверждения платежей. Если вы разрабатываете бэкенд на Node.js и хотите программно создавать QR-коды, библиотека qrcode — самый популярный и простой инструмент. Она не требует установки дополнительных графических пакетов и умеет выводить результат в разных форматах: PNG, SVG, HTML-канвас и даже в текстовый вид для терминала.
Установка
Установите пакет через npm:
npm install qrcode
После установки подключите модуль в ваш проект:
const QRCode = require('qrcode');
Основные методы
Библиотека предоставляет три основных метода для генерации:
QRCode.toDataURL(text, options)— возвращает Data URL (base64 строку с изображением PNG).QRCode.toBuffer(text, options)— возвращает Buffer с PNG-изображением (удобно для сохранения в файл или отправки через HTTP).QRCode.toString(text, options)— возвращает строку в виде SVG или терминальных символов (тип вывода задаётся вoptions.type).QRCode.toCanvas(canvasElement, text, options)— для браузерного окружения (canvas).
Простой пример: создание QR-кода в PNG (буфер)
Самый частый сценарий — сгенерировать изображение и сохранить его в файл или отдать пользователю. Вот как это сделать:
const QRCode = require('qrcode');
const fs = require('fs');
QRCode.toBuffer('https://pythonlib.ru', {
width: 400,
margin: 2,
color: {
dark: '#000000',
light: '#ffffff'
}
})
.then(buffer => {
fs.writeFileSync('qrcode.png', buffer);
console.log('QR-код сохранён в qrcode.png');
})
.catch(err => console.error(err));
В этом примере мы задаём размер 400 пикселей, отступ в 2 модуля и чёрно-белую цветовую схему. Метод toBuffer возвращает Promise, поэтому используем .then() или async/await.
Генерация QR-кода в SVG
Для веб-приложений часто удобнее использовать векторный формат SVG — он масштабируется без потери качества и занимает меньше места. Укажите type: 'svg' в опциях:
const QRCode = require('qrcode');
QRCode.toString('https://pythonlib.ru', {
type: 'svg',
width: 300,
color: {
dark: '#1a73e8',
light: '#ffffff'
}
})
.then(svgString => {
console.log(svgString);
// Теперь вы можете сохранить svgString в файл или вставить в HTML
})
.catch(err => console.error(err));
Вывод QR-кода прямо в терминал
Иногда нужно быстро проверить ссылку, не открывая браузер. Библиотека умеет рисовать QR-код символами Unicode в консоли:
const QRCode = require('qrcode');
QRCode.toString('Hello, PythonLib!', {
type: 'terminal',
small: true
})
.then(qr => {
console.log(qr);
})
.catch(err => console.error(err));
Параметр small: true делает QR-код компактнее (использует половинные блоки). Если его убрать, изображение будет крупнее, но более детальным.
Настройки и параметры
Объект options позволяет гибко управлять генерацией. Основные поля:
width— ширина изображения в пикселях (по умолчанию 256).margin— отступ от края (в модулях QR-кода, по умолчанию 4).color.dark— цвет тёмных модулей (hex, rgb или название цвета).color.light— цвет фона (по умолчанию белый).errorCorrectionLevel— уровень коррекции ошибок:'L'(7%),'M'(15%),'Q'(25%),'H'(30%). Чем выше уровень, тем больше данных можно восстановить, но и сам QR-код становится плотнее.type— формат вывода:'png','svg','terminal','utf8'(для toString).