114 lines
3.4 KiB
Markdown
114 lines
3.4 KiB
Markdown
# gozxing A Barcode Scanning/Encoding Library for Go
|
|
|
|
[](https://github.com/makiuchi-d/gozxing/actions/workflows/main.yml)
|
|
[](https://codecov.io/gh/makiuchi-d/gozxing)
|
|
|
|
[ZXing](https://github.com/zxing/zxing) is an open-source, multi-format 1D/2D barcode image processing library for Java.
|
|
This project is a port of ZXing core library to pure Go.
|
|
|
|
## Porting Status (supported formats)
|
|
|
|
### 2D barcodes
|
|
|
|
| Format | Scanning | Encoding |
|
|
|-------------|--------------------|--------------------|
|
|
| QR Code | :heavy_check_mark: | :heavy_check_mark: |
|
|
| Data Matrix | :heavy_check_mark: | :heavy_check_mark: |
|
|
| Aztec | :heavy_check_mark: | |
|
|
| PDF 417 | | |
|
|
| MaxiCode | | |
|
|
|
|
|
|
### 1D product barcodes
|
|
|
|
| Format | Scanning | Encoding |
|
|
|-------------|--------------------|--------------------|
|
|
| UPC-A | :heavy_check_mark: | :heavy_check_mark: |
|
|
| UPC-E | :heavy_check_mark: | :heavy_check_mark: |
|
|
| EAN-8 | :heavy_check_mark: | :heavy_check_mark: |
|
|
| EAN-13 | :heavy_check_mark: | :heavy_check_mark: |
|
|
|
|
### 1D industrial barcode
|
|
|
|
| Format | Scanning | Encoding |
|
|
|--------------|--------------------|--------------------|
|
|
| Code 39 | :heavy_check_mark: | :heavy_check_mark: |
|
|
| Code 93 | :heavy_check_mark: | :heavy_check_mark: |
|
|
| Code 128 | :heavy_check_mark: | :heavy_check_mark: |
|
|
| Codabar | :heavy_check_mark: | :heavy_check_mark: |
|
|
| ITF | :heavy_check_mark: | :heavy_check_mark: |
|
|
| RSS-14 | :heavy_check_mark: | - |
|
|
| RSS-Expanded | | |
|
|
|
|
### Special reader/writer
|
|
|
|
| Reader/Writer | Porting status |
|
|
|------------------------------|--------------------|
|
|
| MultiFormatReader | |
|
|
| MultiFormatWriter | |
|
|
| ByQuadrantReader | |
|
|
| GenericMultipleBarcodeReader | |
|
|
| QRCodeMultiReader | :heavy_check_mark: |
|
|
| MultiFormatUPCEANReader | :heavy_check_mark: |
|
|
| MultiFormatOneDReader | |
|
|
|
|
## Usage Examples
|
|
|
|
### Scanning QR code
|
|
|
|
```Go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"image"
|
|
_ "image/jpeg"
|
|
"os"
|
|
|
|
"github.com/makiuchi-d/gozxing"
|
|
"github.com/makiuchi-d/gozxing/qrcode"
|
|
)
|
|
|
|
func main() {
|
|
// open and decode image file
|
|
file, _ := os.Open("qrcode.jpg")
|
|
img, _, _ := image.Decode(file)
|
|
|
|
// prepare BinaryBitmap
|
|
bmp, _ := gozxing.NewBinaryBitmapFromImage(img)
|
|
|
|
// decode image
|
|
qrReader := qrcode.NewQRCodeReader()
|
|
result, _ := qrReader.Decode(bmp, nil)
|
|
|
|
fmt.Println(result)
|
|
}
|
|
```
|
|
|
|
### Generating CODE128 barcode
|
|
|
|
```Go
|
|
package main
|
|
|
|
import (
|
|
"image/png"
|
|
"os"
|
|
|
|
"github.com/makiuchi-d/gozxing"
|
|
"github.com/makiuchi-d/gozxing/oned"
|
|
)
|
|
|
|
func main() {
|
|
// Generate a barcode image (*BitMatrix)
|
|
enc := oned.NewCode128Writer()
|
|
img, _ := enc.Encode("Hello, Gophers!", gozxing.BarcodeFormat_CODE_128, 250, 50, nil)
|
|
|
|
file, _ := os.Create("barcode.png")
|
|
defer file.Close()
|
|
|
|
// *BitMatrix implements the image.Image interface,
|
|
// so it is able to be passed to png.Encode directly.
|
|
_ = png.Encode(file, img)
|
|
}
|
|
```
|