qrcode

package module
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 23, 2020 License: MIT Imports: 15 Imported by: 1

README

go-qrcode

Package qrcode implements a QR Code encoder. Build Status

A QR Code is a matrix (two-dimensional) barcode. Arbitrary content may be encoded, with URLs being a popular choice :)

Each QR Code contains error recovery information to aid reading damaged or obscured codes. There are four levels of error recovery: Low, medium, high and highest. QR Codes with a higher recovery level are more robust to damage, at the cost of being physically larger.

Install

go get -u github.com/Z-M-Huang/go-qrcode/...

A command-line tool qrcode will be built into $GOPATH/bin/.

Usage

import qrcode "github.com/Z-M-Huang/go-qrcode"
  • Create a 256x256 PNG image:

      var png []byte
      png, err := qrcode.Encode("https://example.org", qrcode.Medium, 256)
    
  • Create a 256x256 PNG image and write to a file:

      err := qrcode.WriteFile("https://example.org", qrcode.Medium, 256, "qr.png")
    
  • Create a 256x256 PNG image with custom colors and write to file:

      err := qrcode.WriteColorFile("https://example.org", qrcode.Medium, 256, color.Black, color.White, "qr.png")
    
  • Create a 256x256 PNG image with logo: logoImg, _ := os.Open("google.png") defer logoImg.Close() logo, _, _ := image.Decode(logoImg)

      		var q *qrcode.QRCode
      		q, _ = qrcode.New(content, qrcode.Highest)
      		png, _ := q.PNGWithLogo(256, logo)
    
      		var fh *os.File
      		fh, _ = os.Create(outFile + ".png")
      		defer fh.Close()
      		fh.Write(png)
    
  • Create a 256x256 PNG image with background image: logoImg, _ := os.Open("google.png") defer logoImg.Close() logo, _, _ := image.Decode(logoImg)

      		var q *qrcode.QRCode
      		q, _ = qrcode.New(content, qrcode.Highest)
      		q.BackgroundImage = logo
      		png, _ := q.PNG(256, logo)
    
      		var fh *os.File
      		fh, _ = os.Create(outFile + ".png")
      		defer fh.Close()
      		fh.Write(png)
    
  • Create a 256x256 GIF image with Animated Logo GIF: logoGifImage, _ := os.Open("google.gif") defer logoGifImage.Close() logo, _:= gif.DecodeAll(logoGifImage)

      		var q *qrcode.QRCode
      		q, _ = qrcode.New(content, qrcode.Highest)
      		gif, _ := q.GIFLogo(256, logo)
    
      		var fh *os.File
      		fh, _ = os.Create(outFile + ".gif")
      		defer fh.Close()
      		fh.Write(gif)
    

All examples use the qrcode.Medium error Recovery Level and create a fixed 256x256px size QR Code. The last function creates a white on black instead of black on white QR Code.

CLI

A command-line tool qrcode will be built into $GOPATH/bin/.

qrcode -- QR Code encoder in Go
https://github.com/Z-M-Huang/go-qrcode

Flags:
  -d	disable QR Code border
  -i	invert black and white
  -o string
    	out PNG file prefix, empty for stdout
  -s int
    	image size (pixel) (default 256)
  -t	print as text-art on stdout

Usage:
  1. Arguments except for flags are joined by " " and used to generate QR code.
     Default output is STDOUT, pipe to imagemagick command "display" to display
     on any X server.

       qrcode hello word | display

  2. Save to file if "display" not available:

       qrcode "homepage: https://github.com/Z-M-Huang/go-qrcode" > out.png

Maximum capacity

The maximum capacity of a QR Code varies according to the content encoded and the error recovery level. The maximum capacity is 2,953 bytes, 4,296 alphanumeric characters, 7,089 numeric digits, or a combination of these.

Borderless QR Codes

To aid QR Code reading software, QR codes have a built in whitespace border.

If you know what you're doing, and don't want a border, see https://gist.github.com/skip2/7e3d8a82f5317df9be437f8ec8ec0b7d for how to do it. It's still recommended you include a border manually.

Thanks

This is a forked version from https://github.com/skip2/go-qrcode. Special thanks to all the devs for the incredible work you've done!

Documentation

Overview

Package qrcode implements a QR Code encoder.

A QR Code is a matrix (two-dimensional) barcode. Arbitrary content may be encoded.

A QR Code contains error recovery information to aid reading damaged or obscured codes. There are four levels of error recovery: qrcode.{Low, Medium, High, Highest}. QR Codes with a higher recovery level are more robust to damage, at the cost of being physically larger.

Three functions cover most use cases:

- Create a PNG image:

var png []byte
png, err := qrcode.Encode("https://example.org", qrcode.Medium, 256)

- Create a PNG image and write to a file:

err := qrcode.WriteFile("https://example.org", qrcode.Medium, 256, "qr.png")

- Create a PNG image with custom colors and write to file:

err := qrcode.WriteColorFile("https://example.org", qrcode.Medium, 256, color.Black, color.White, "qr.png")

All examples use the qrcode.Medium error Recovery Level and create a fixed 256x256px size QR Code. The last function creates a white on black instead of black on white QR Code.

To generate a variable sized image instead, specify a negative size (in place of the 256 above), such as -4 or -5. Larger negative numbers create larger images: A size of -5 sets each module (QR Code "pixel") to be 5px wide/high.

- Create a PNG image (variable size, with minimum white padding) and write to a file:

err := qrcode.WriteFile("https://example.org", qrcode.Medium, -5, "qr.png")

The maximum capacity of a QR Code varies according to the content encoded and the error recovery level. The maximum capacity is 2,953 bytes, 4,296 alphanumeric characters, 7,089 numeric digits, or a combination of these.

This package implements a subset of QR Code 2005, as defined in ISO/IEC 18004:2006.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Encode

func Encode(content string, level RecoveryLevel, size int) ([]byte, error)

Encode a QR Code and return a raw PNG image.

size is both the image width and height in pixels. If size is too small then a larger image is silently returned. Negative values for size cause a variable sized image to be returned: See the documentation for Image().

To serve over HTTP, remember to send a Content-Type: image/png header.

func WriteColorFile

func WriteColorFile(content string, level RecoveryLevel, size int, background,
	foreground color.Color, filename string) error

WriteColorFile encodes, then writes a QR Code to the given filename in PNG format. With WriteColorFile you can also specify the colors you want to use.

size is both the image width and height in pixels. If size is too small then a larger image is silently written. Negative values for size cause a variable sized image to be written: See the documentation for Image().

func WriteFile

func WriteFile(content string, level RecoveryLevel, size int, filename string) error

WriteFile encodes, then writes a QR Code to the given filename in PNG format.

size is both the image width and height in pixels. If size is too small then a larger image is silently written. Negative values for size cause a variable sized image to be written: See the documentation for Image().

Types

type QRCode

type QRCode struct {
	// Original content encoded.
	Content string

	// QR Code type.
	Level         RecoveryLevel
	VersionNumber int

	// User settable drawing options.
	ForegroundColor color.Color
	BackgroundColor color.Color

	BackgroundImage image.Image
	IsBackgroundGif bool

	// Disable the QR Code border.
	DisableBorder bool
	// contains filtered or unexported fields
}

A QRCode represents a valid encoded QRCode.

func New

func New(content string, level RecoveryLevel) (*QRCode, error)

New constructs a QRCode.

var q *qrcode.QRCode
q, err := qrcode.New("my content", qrcode.Medium)

An error occurs if the content is too long.

func (*QRCode) Bitmap

func (q *QRCode) Bitmap() [][]bool

Bitmap returns the QR Code as a 2D array of 1-bit pixels.

bitmap[y][x] is true if the pixel at (x, y) is set.

The bitmap includes the required "quiet zone" around the QR Code to aid decoding.

func (q *QRCode) GIFLogo(size int, logoGif *gif.GIF) ([]byte, error)

GIFLogo returns the QR Code as a GIF image.

func (*QRCode) Image

func (q *QRCode) Image(size int) image.Image

Image returns the QR Code as an image.Image.

A positive size sets a fixed image width and height (e.g. 256 yields an 256x256px image).

Depending on the amount of data encoded, fixed size images can have different amounts of padding (white space around the QR Code). As an alternative, a variable sized image can be generated instead:

A negative size causes a variable sized image to be returned. The image returned is the minimum size required for the QR Code. Choose a larger negative number to increase the scale of the image. e.g. a size of -5 causes each module (QR Code "pixel") to be 5px in size.

func (*QRCode) PNG

func (q *QRCode) PNG(size int) ([]byte, error)

PNG returns the QR Code as a PNG image.

size is both the image width and height in pixels. If size is too small then a larger image is silently returned. Negative values for size cause a variable sized image to be returned: See the documentation for Image().

func (q *QRCode) PNGWithLogo(size int, logoImage image.Image) ([]byte, error)

PNGWithLogo generate QRCode PNG with logo in center

func (*QRCode) ToSmallString

func (q *QRCode) ToSmallString(inverseColor bool) string

ToSmallString produces a multi-line string that forms a QR-code image, a factor two smaller in x and y then ToString.

func (*QRCode) ToString

func (q *QRCode) ToString(inverseColor bool) string

ToString produces a multi-line string that forms a QR-code image.

func (*QRCode) Write

func (q *QRCode) Write(size int, out io.Writer) error

Write writes the QR Code as a PNG image to io.Writer.

size is both the image width and height in pixels. If size is too small then a larger image is silently written. Negative values for size cause a variable sized image to be written: See the documentation for Image().

func (*QRCode) WriteFile

func (q *QRCode) WriteFile(size int, filename string) error

WriteFile writes the QR Code as a PNG image to the specified file.

size is both the image width and height in pixels. If size is too small then a larger image is silently written. Negative values for size cause a variable sized image to be written: See the documentation for Image().

type RecoveryLevel

type RecoveryLevel int

RecoveryLevel Error detection/recovery capacity.

There are several levels of error detection/recovery capacity. Higher levels of error recovery are able to correct more errors, with the trade-off of increased symbol size.

const (
	// Low Level L: 7% error recovery.
	Low RecoveryLevel = iota

	// Medium Level M: 15% error recovery. Good default choice.
	Medium

	// High Level Q: 25% error recovery.
	High

	// Highest Level H: 30% error recovery.
	Highest
)

Directories

Path Synopsis
Package bitset implements an append only bit array.
Package bitset implements an append only bit array.
Package reedsolomon provides error correction encoding for QR Code 2005.
Package reedsolomon provides error correction encoding for QR Code 2005.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL