Java code parsing QR code, java Parsing
Java code parsing QR code general steps
This article uses google's zxing technology to parse the QR code. The general steps for parsing the QR Code are as follows:
1. Download The zxing-core jar package:
2. Create a BufferedImageLuminanceSource class that inherits LuminanceSource. This class is included in google's source code. However, for ease of use, the following source code can be directly copied and used:
private final BufferedImage image;private final int left;private final int top;public BufferedImageLuminanceSource(BufferedImage image) {this(image, 0, 0, image.getWidth(), image.getHeight());}public BufferedImageLuminanceSource(BufferedImage image, int left, int top, int width, int height) {super(width, height);int sourceWidth = image.getWidth();int sourceHeight = image.getHeight();if (left + width > sourceWidth || top + height > sourceHeight) {throw new IllegalArgumentException("Crop rectangle does not fit within image data.");}for (int y = top; y < top + height; y++) {for (int x = left; x < left + width; x++) {if ((image.getRGB(x, y) & 0xFF000000) == 0) {image.setRGB(x, y, 0xFFFFFFFF); // = white}}}this.image = new BufferedImage(sourceWidth, sourceHeight, BufferedImage.TYPE_BYTE_GRAY);this.image.getGraphics().drawImage(image, 0, 0, null);this.left = left;this.top = top;}@Overridepublic byte[] getRow(int y, byte[] row) {if (y < 0 || y >= getHeight()) {throw new IllegalArgumentException("Requested row is outside the image: " + y);}int width = getWidth();if (row == null || row.length < width) {row = new byte[width];}image.getRaster().getDataElements(left, top + y, width, 1, row);return row;}@Overridepublic byte[] getMatrix() {int width = getWidth();int height = getHeight();int area = width * height;byte[] matrix = new byte[area];image.getRaster().getDataElements(left, top, width, height, matrix);return matrix;}@Overridepublic boolean isCropSupported() {return true;}@Overridepublic LuminanceSource crop(int left, int top, int width, int height) {return new BufferedImageLuminanceSource(image, this.left + left, this.top + top, width, height);}@Overridepublic boolean isRotateSupported() {return true;}@Overridepublic LuminanceSource rotateCounterClockwise() {int sourceWidth = image.getWidth();int sourceHeight = image.getHeight();AffineTransform transform = new AffineTransform(0.0, -1.0, 1.0, 0.0, 0.0, sourceWidth);BufferedImage rotatedImage = new BufferedImage(sourceHeight, sourceWidth, BufferedImage.TYPE_BYTE_GRAY);Graphics2D g = rotatedImage.createGraphics();g.drawImage(image, transform, null);g.dispose();int width = getWidth();return new BufferedImageLuminanceSource(rotatedImage, top, sourceWidth - (left + width), getHeight(), width);}
3. Create a startup class to parse the QR code:
Public static void main (String [] args) {try {MultiFormatReader formatReader = new MultiFormatReader (); String filePath = "D:/test/blog .jpg "; file file = new File (filePath); BufferedImage image = ImageIO. read (file); LuminanceSource source = new bytes (image); Binarizer binarizer = new HybridBinarizer (source); BinaryBitmap binaryBitmap = new BinaryBitmap (binarizer); Map hints = new HashMap (); // decode the settings as UTF-8 hints. put (EncodeHintType. CHARACTER_SET, "UTF-8"); // optimize the hints precision. put (DecodeHintType. TRY_HARDER, Boolean. TRUE); // in complex mode, enable the PURE_BARCODE mode hints. put (DecodeHintType. PURE_BARCODE, Boolean. TRUE); Result result = formatReader. decode (binaryBitmap, hints); System. out. println ("result =" + result. toString (); System. out. println ("resultFormat =" + result. getBarcodeFormat (); System. out. println ("resultText =" + result. getText ();} catch (Exception e) {e. printStackTrace ();}}
4. After testing, you can resolve the QR code and obtain the url of the QR code;