Core barcode encoding/decoding library supporting 17 formats including QR Code, Data Matrix, Aztec, PDF 417, and various 1D barcodes
—
Get started with ZXing Core in 5 minutes. These examples show the most common use cases for barcode encoding and decoding.
Add ZXing Core to your Maven project:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.4</version>
</dependency>Decode any barcode from an image in just a few lines:
import com.google.zxing.*;
import com.google.zxing.common.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
// Load image
BufferedImage image = ImageIO.read(new File("barcode.png"));
// Convert to ZXing format
int width = image.getWidth();
int height = image.getHeight();
int[] pixels = image.getRGB(0, 0, width, height, null, 0, width);
LuminanceSource source = new RGBLuminanceSource(width, height, pixels);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
// Decode
Reader reader = new MultiFormatReader();
try {
Result result = reader.decode(bitmap);
System.out.println("Barcode format: " + result.getBarcodeFormat());
System.out.println("Barcode text: " + result.getText());
} catch (NotFoundException e) {
System.out.println("No barcode found");
}Generate a QR code and save it as an image:
import com.google.zxing.*;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
// Generate QR Code
QRCodeWriter writer = new QRCodeWriter();
BitMatrix matrix = writer.encode(
"https://example.com",
BarcodeFormat.QR_CODE,
300,
300
);
// Convert to image
BufferedImage image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB);
for (int y = 0; y < 300; y++) {
for (int x = 0; x < 300; x++) {
int color = matrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF;
image.setRGB(x, y, color);
}
}
// Save to file
ImageIO.write(image, "PNG", new File("qrcode.png"));
System.out.println("QR Code generated!");import com.google.zxing.*;
import java.util.*;
Map<DecodeHintType, Object> hints = new EnumMap<>(DecodeHintType.class);
hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
Reader reader = new MultiFormatReader();
Result result = reader.decode(bitmap, hints);import com.google.zxing.*;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.util.*;
Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.MARGIN, 1);
Writer writer = new QRCodeWriter();
BitMatrix matrix = writer.encode(
"Important data",
BarcodeFormat.QR_CODE,
400,
400,
hints
);import com.google.zxing.*;
import java.util.*;
// Only try QR Codes (much faster than scanning all formats)
Map<DecodeHintType, Object> hints = new EnumMap<>(DecodeHintType.class);
hints.put(DecodeHintType.POSSIBLE_FORMATS,
Collections.singletonList(BarcodeFormat.QR_CODE));
Reader reader = new MultiFormatReader();
Result result = reader.decode(bitmap, hints);import com.google.zxing.*;
import com.google.zxing.datamatrix.DataMatrixWriter;
Writer writer = new DataMatrixWriter();
BitMatrix matrix = writer.encode(
"Product-12345",
BarcodeFormat.DATA_MATRIX,
200,
200
);import com.google.zxing.*;
import com.google.zxing.client.result.*;
Result result = reader.decode(bitmap);
ParsedResult parsed = ResultParser.parseResult(result);
if (parsed.getType() == ParsedResultType.WIFI) {
WifiParsedResult wifi = (WifiParsedResult) parsed;
System.out.println("SSID: " + wifi.getSsid());
System.out.println("Password: " + wifi.getPassword());
System.out.println("Encryption: " + wifi.getNetworkEncryption());
}You'll use these classes for 90% of tasks:
Decoding:
MultiFormatReader - Decode any barcode formatQRCodeReader - Decode QR Codes specificallyRGBLuminanceSource - Convert images to luminanceHybridBinarizer - Convert to black/whiteBinaryBitmap - Final format for readersEncoding:
MultiFormatWriter - Encode any formatQRCodeWriter - Generate QR CodesDataMatrixWriter - Generate Data Matrix codesBitMatrix - Result of encodingConfiguration:
DecodeHintType - Configure decodingEncodeHintType - Configure encodingBarcodeFormat - Specify formatResults:
Result - Decoded barcode dataResultParser - Parse structured dataParsedResult - Structured data types"NotFoundException" - No barcode found:
TRY_HARDER hintQR Code too small in generated image:
Character encoding issues:
CHARACTER_SET hint to "UTF-8"Import errors: