You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Support for Numeric, Alphanumeric, Kanji and Byte mode
Support for mixed modes
Support for chinese, cyrillic, greek and japanese characters
Support for multibyte characters (like emojis 😄)
Auto generates optimized segments for best data compression and smallest QR Code size
Installation
Inside your project folder do:
npm install --save qrcode
or, install it globally to use qrcode from the command line to save qrcode images or generate ones you can view in your terminal.
npm install -g qrcode
Usage
CLI
qrcode <text> [output file]
Output image format is detected from file extension.
Supported format are png, svg and txt.
If no output file is specified, the QR Code will be rendered directly in the terminal.
Example
qrcode "Draw a QR Code in my terminal"
qrcode "I like to save qrs as a PNG" qr.png
qrcode "I also like to save them as a SVG" qr.svg
Browser
node-qrcode can be used in browser through module bundlers like Browserify and Webpack or by including the precompiled bundle present in build/ folder.
If you install through npm, precompiled files will be available in node_modules/qrcode/build/ folder.
NodeJS
Simply require the module qrcode
varQRCode=require('qrcode')QRCode.toDataURL('I am a pony!',function(err,url){console.log(url)})
Error correction level
Error correction capability allows to successfully scan a QR Code even if the symbol is dirty or damaged.
Four levels are available to choose according to the operating environment.
Higher levels offer a better error resistance but reduce the symbol's capacity.
If the chances that the QR Code symbol may be corrupted are low (for example if it is showed through a monitor)
is possible to safely use a low error level such as Low or Medium.
Possible levels are shown below:
Level
Error resistance
L (Low)
~7%
M (Medium)
~15%
Q (Quartile)
~25%
H (High)
~30%
The percentage indicates the maximum amount of damaged surface after which the symbol becomes unreadable.
Error level can be set through options.errorCorrectionLevel property.
Capacity depends on symbol version and error correction level. Also encoding modes may influence the amount of storable data.
The QR Code versions range from version 1 to version 40.
Each version has a different number of modules (black and white dots), which define the symbol's size.
For version 1 they are 21x21, for version 2 25x25 e so on.
Higher is the version, more are the storable data, and of course bigger will be the QR Code symbol.
The table below shows the maximum number of storable characters in each encoding mode and for each error correction level.
Mode
L
M
Q
H
Numeric
7089
5596
3993
3057
Alphanumeric
4296
3391
2420
1852
Byte
2953
2331
1663
1273
Kanji
1817
1435
1024
784
Note: Maximum characters number can be different when using Mixed modes.
QR Code version can be set through options.version property.
If no version is specified, the more suitable value will be used. Unless a specific version is required, this option is not needed.
Characters from the Shift JIS system based on JIS X 0208
2 kanji are represented by 13 bits
Byte
Characters from the ISO/IEC 8859-1 character set
Each characters are represented by 8 bits
Choose the right mode may be tricky if the input text is unknown.
In these cases Byte mode is the best choice since all characters can be encoded with it. (See Multibyte characters)
However, if the QR Code reader supports mixed modes, using Auto mode may produce better results.
Mixed modes
Mixed modes are also possible. A QR code can be generated from a series of segments having different encoding modes to optimize the data compression.
However, switching from a mode to another has a cost which may lead to a worst result if it's not taken into account.
See Manual mode for an example of how to specify segments with different encoding modes.
Auto mode
By default, automatic mode selection is used.
The input string is automatically splitted in various segments optimized to produce the shortest possible bitstream using mixed modes.
This is the preferred way to generate the QR Code.
For example, the string ABCDE12345678?A1A will be splitted in 3 segments with the following modes:
Segment
Mode
ABCDE
Alphanumeric
12345678
Numeric
?A1A
Byte
Any other combinations of segments and modes will result in a longer bitstream.
If you need to keep the QR Code size small, this mode will produce the best results.
Manual mode
If auto mode doesn't work for you or you have specific needs, is also possible to manually specify each segment with the relative mode.
In this way no segment optimizations will be applied under the hood.
Segments list can be passed as an array of object:
With kanji mode is possible to encode characters from the Shift JIS system in an optimized way.
Unfortunately, there isn't a way to calculate a Shifted JIS values from, for example, a character encoded in UTF-8, for this reason a conversion table from the input characters to the SJIS values is needed.
This table is not included by default in the bundle to keep the size as small as possible.
If your application requires kanji support, you will need to pass a function that will take care of converting the input characters to appropriate values.
An helper method is provided by the lib through an optional file that you can include as shown in the example below.
Note: Support for Kanji mode is only needed if you want to benefit of the data compression, otherwise is still possible to encode kanji using Byte mode (See Multibyte characters).
Support for multibyte characters isn't present in the initial QR Code standard, but is possible to encode UTF-8 characters in Byte mode.
QR Codes provide a way to specify a different type of character set through ECI (Extended Channel Interpretation), but it's not fully implemented in this lib yet.
Most QR Code readers, however, are able to recognize multibyte characters even without ECI.
Note that a single Kanji/Kana or Emoji can take up to 4 bytes.
QR Code version. If not specified the more suitable value will be calculated.
errorCorrectionLevel
Type: String
Default: M
Error correction level.
Possible values are low, medium, quartile, high or L, M, Q, H.
toSJISFunc
Type: Function
Helper function used internally to convert a kanji to its Shift JIS value.
Provide this function if you need support for Kanji mode.
Renderers options
margin
Type: Number
Default: 4
Define how much wide the quiet zone should be.
scale
Type: Number
Default: 4
Scale factor. A value of 1 means 1px per modules (black dots).
color.dark
Type: String
Default: #000000ff
Color of dark module. Value must be in hex format (RGBA).
Note: dark color should always be darker than color.light.
color.light
Type: String
Default: #ffffffff
Color of light module. Value must be in hex format (RGBA).
GS1 QR Codes
There was a real good discussion here about them. but in short any qrcode generator will make gs1 compatible qrcodes, but what defines a gs1 qrcode is a header with metadata that describes your gs1 information.
node-qrcode
Highlights
Installation
Inside your project folder do:
or, install it globally to use
qrcode
from the command line to save qrcode images or generate ones you can view in your terminal.Usage
CLI
Output image format is detected from file extension.
Supported format are
png
,svg
andtxt
.If no output file is specified, the QR Code will be rendered directly in the terminal.
Example
qrcode "Draw a QR Code in my terminal"
qrcode "I like to save qrs as a PNG" qr.png
qrcode "I also like to save them as a SVG" qr.svg
Browser
node-qrcode
can be used in browser through module bundlers like Browserify and Webpack or by including the precompiled bundle present inbuild/
folder.Module bundlers
Precompiled bundle
If you install through
npm
, precompiled files will be available innode_modules/qrcode/build/
folder.NodeJS
Simply require the module
qrcode
Error correction level
Error correction capability allows to successfully scan a QR Code even if the symbol is dirty or damaged.
Four levels are available to choose according to the operating environment.
Higher levels offer a better error resistance but reduce the symbol's capacity.
If the chances that the QR Code symbol may be corrupted are low (for example if it is showed through a monitor)
is possible to safely use a low error level such as
Low
orMedium
.Possible levels are shown below:
The percentage indicates the maximum amount of damaged surface after which the symbol becomes unreadable.
Error level can be set through
options.errorCorrectionLevel
property.If not specified, the default value is
M
.QR Code capacity
Capacity depends on symbol version and error correction level. Also encoding modes may influence the amount of storable data.
The QR Code versions range from version 1 to version 40.
Each version has a different number of modules (black and white dots), which define the symbol's size.
For version 1 they are
21x21
, for version 225x25
e so on.Higher is the version, more are the storable data, and of course bigger will be the QR Code symbol.
The table below shows the maximum number of storable characters in each encoding mode and for each error correction level.
Note: Maximum characters number can be different when using Mixed modes.
QR Code version can be set through
options.version
property.If no version is specified, the more suitable value will be used. Unless a specific version is required, this option is not needed.
Encoding modes
Modes can be used to encode a string in a more efficient way.
A mode may be more suitable than others depending on the string content.
A list of supported modes are shown in the table below:
Choose the right mode may be tricky if the input text is unknown.
In these cases Byte mode is the best choice since all characters can be encoded with it. (See Multibyte characters)
However, if the QR Code reader supports mixed modes, using Auto mode may produce better results.
Mixed modes
Mixed modes are also possible. A QR code can be generated from a series of segments having different encoding modes to optimize the data compression.
However, switching from a mode to another has a cost which may lead to a worst result if it's not taken into account.
See Manual mode for an example of how to specify segments with different encoding modes.
Auto mode
By default, automatic mode selection is used.
The input string is automatically splitted in various segments optimized to produce the shortest possible bitstream using mixed modes.
This is the preferred way to generate the QR Code.
For example, the string ABCDE12345678?A1A will be splitted in 3 segments with the following modes:
Any other combinations of segments and modes will result in a longer bitstream.
If you need to keep the QR Code size small, this mode will produce the best results.
Manual mode
If auto mode doesn't work for you or you have specific needs, is also possible to manually specify each segment with the relative mode.
In this way no segment optimizations will be applied under the hood.
Segments list can be passed as an array of object:
Kanji mode
With kanji mode is possible to encode characters from the Shift JIS system in an optimized way.
Unfortunately, there isn't a way to calculate a Shifted JIS values from, for example, a character encoded in UTF-8, for this reason a conversion table from the input characters to the SJIS values is needed.
This table is not included by default in the bundle to keep the size as small as possible.
If your application requires kanji support, you will need to pass a function that will take care of converting the input characters to appropriate values.
An helper method is provided by the lib through an optional file that you can include as shown in the example below.
Note: Support for Kanji mode is only needed if you want to benefit of the data compression, otherwise is still possible to encode kanji using Byte mode (See Multibyte characters).
With precompiled bundle:
Multibyte characters
Support for multibyte characters isn't present in the initial QR Code standard, but is possible to encode UTF-8 characters in Byte mode.
QR Codes provide a way to specify a different type of character set through ECI (Extended Channel Interpretation), but it's not fully implemented in this lib yet.
Most QR Code readers, however, are able to recognize multibyte characters even without ECI.
Note that a single Kanji/Kana or Emoji can take up to 4 bytes.
API
Browser:
Server:
Browser API
create(text, [options])
Creates QR Code symbol and returns a qrcode object.
text
Type:
String|Array
Text to encode or a list of objects describing segments.
options
See QR Code options.
returns
Type:
Object
toCanvas(canvasElement, text, [options], cb(error))
toCanvas(text, [options], cb(error, canvas))
Draws qr code symbol to canvas.
If
canvasElement
is omitted a new canvas is returned.canvasElement
Type:
DOMElement
Canvas where to draw QR Code.
text
Type:
String|Array
Text to encode or a list of objects describing segments.
options
See Options.
cb
Type:
Function
Callback function called on finish.
Example
toDataURL(text, [options], cb(error, url))
toDataURL(canvasElement, text, [options], cb(error, url))
Returns a Data URI containing a representation of the QR Code image.
If provided,
canvasElement
will be used as canvas to generate the data URI.canvasElement
Type:
DOMElement
Canvas where to draw QR Code.
text
Type:
String|Array
Text to encode or a list of objects describing segments.
options
type
Type:
String
Default:
image/png
Data URI format.
Possible values are:
image/png
,image/jpeg
,image/webp
.Note:
image/webp
only works in Chrome browser.rendererOpts.quality
Type:
Number
Default:
0.92
A Number between
0
and1
indicating image quality if the requested type isimage/jpeg
orimage/webp
.See Options for other settings.
cb
Type:
Function
Callback function called on finish.
Example
Server API
create(text, [options])
See create.
toCanvas(canvas, text, [options], cb(error))
Draws qr code symbol to node canvas.
text
Type:
String|Array
Text to encode or a list of objects describing segments.
options
See Options.
cb
Type:
Function
Callback function called on finish.
toDataURL(text, [options], cb(error, url))
Returns a Data URI containing a representation of the QR Code image.
Only works with
image/png
type for now.text
Type:
String|Array
Text to encode or a list of objects describing segments.
options
See Options for other settings.
cb
Type:
Function
Callback function called on finish.
toString(text, [options], cb(error, string))
Returns a string representation of the QR Code.
If choosen output format is
svg
it will returns a string containing xml code.text
Type:
String|Array
Text to encode or a list of objects describing segments.
options
type
Type:
String
Default:
utf8
Output format.
Possible values are:
utf8
,svg
,terminal
.See Options for other settings.
cb
Type:
Function
Callback function called on finish.
Example
toFile(path, text, [options], cb(error))
Saves QR Code to image file.
If
options.type
is not specified, the format will be guessed from file extension.Recognized extensions are
png
,svg
,txt
.path
Type:
String
Path where to save the file.
text
Type:
String|Array
Text to encode or a list of objects describing segments.
options
type
Type:
String
Default:
png
Output format.
Possible values are:
png
,svg
,utf8
.rendererOpts.deflateLevel
(png only)Type:
Number
Default:
9
Compression level for deflate.
rendererOpts.deflateStrategy
(png only)Type:
Number
Default:
3
Compression strategy for deflate.
See Options for other settings.
cb
Type:
Function
Callback function called on finish.
Example
toFileStream(stream, text, [options], cb(error))
Writes QR Code image to stream. Only works with
png
format for now.stream
Type:
stream.Writable
Node stream.
text
Type:
String|Array
Text to encode or a list of objects describing segments.
options
See Options.
cb
Type:
Function
Callback function called on finish.
Options
QR Code options
version
Type:
Number
QR Code version. If not specified the more suitable value will be calculated.
errorCorrectionLevel
Type:
String
Default:
M
Error correction level.
Possible values are
low, medium, quartile, high
orL, M, Q, H
.toSJISFunc
Type:
Function
Helper function used internally to convert a kanji to its Shift JIS value.
Provide this function if you need support for Kanji mode.
Renderers options
margin
Type:
Number
Default:
4
Define how much wide the quiet zone should be.
scale
Type:
Number
Default:
4
Scale factor. A value of
1
means 1px per modules (black dots).color.dark
Type:
String
Default:
#000000ff
Color of dark module. Value must be in hex format (RGBA).
Note: dark color should always be darker than
color.light
.color.light
Type:
String
Default:
#ffffffff
Color of light module. Value must be in hex format (RGBA).
GS1 QR Codes
There was a real good discussion here about them. but in short any qrcode generator will make gs1 compatible qrcodes, but what defines a gs1 qrcode is a header with metadata that describes your gs1 information.
soldair/node-qrcode#45
Credits
This lib is based on "QRCode for JavaScript" which Kazuhiko Arase thankfully MIT licensed.
License
MIT
The word "QR Code" is registered trademark of:
DENSO WAVE INCORPORATED
The text was updated successfully, but these errors were encountered: