QR -коды везде, и вы можете сканировать его, и вы получите подарки. QR -коды сейчас так популярны. Я считаю, что все не очень ясно о том, как генерируются QR -коды. Теперь редактор поделится с вами методом помочь вам изучить метод генерации QR -кода, поделившись этой статьей.
Фактически, эта функция в основном используется с помощью JAR, опубликованной Goggle.
1. Генерация QR -кода
Добавьте пакет ZXING-CORE.JAR в ClassPath.
Генерация QR -кода требует помощи класса MatrixtoImageWriter. Этот класс предоставляется Google. Вы можете скопировать класс в исходный код. Здесь я вставляю исходный код этого класса и могу использоваться напрямую.
Код, который может напрямую генерировать QR -код
public void test1 () выбрасывает Exception {String content = "www.baidu.com"; String path = "d: //"; MultiformatTwriter MultiformatWriter = new MultiformatWriter (); // ZXING - это штрих -код, предоставляемый Google. Map nts = new hashmap (); nts.put (encodehinttype.character_set, "utf-8"); Bitmatrix Bitmatrix = multiformatwriter.encode (content, barcodeformat.qr_code, 400, 400, ntsts); // Это размер файла фото файла1 = новый файл (Path, "my.jpg"); MatrixtoImageWriter.WriteToFile (Bitmatrix, "jpg", file1); System.out.println («выполнение завершено»); }Когда мы сможем обнаружить, что после копирования этого кода мы обнаружили, что была сообщена ошибка MatrixtoImageWriter, поэтому нам нужно искать его, но я опубликовал код здесь и может использоваться напрямую.
Импорт com.google.zxing.common.bitmatrix; Импорт javax.imageio.imageio; Импорт java.io.file; импортировать java.io.outputstream; импортировать java.io.ioexception; Импорт java.awt.image.bufferedImage; Public Final Class MatrixtoImageWriter {Private Static Final Int Black = 0xff000000; частный статический конечный int white = 0xffffffff; Private MatrixtoImageWriter () {} public Static BufferedImage TobufferedImage (Bitmatrix Matrix) {int width = matrix.getWidth (); int height = matrix.getheight (); BufferedImage Image = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); for (int x = 0; x <width; x ++) {for (int y = 0; y <height; y ++) {image.setrgb (x, y, matrix.get (x, y)? Black: White); }} вернуть изображение; } public static void writetOfile (матрица Bitmatrix, формат строки, файл файла) бросает ioException {buffereMage image = tobufferedImage (matrix); if (! Imageio.write (image, format, file)) {бросить новое ioException («Не удалось бы написать изображение формата» + format + »в" + file); }} public static void writeToStream (матрица Bitmatrix, формат строки, выходной поток) Throws IOException {BuffereMage Image = tobufferedImage (matrix); if (! Imageio.write (Image, Format, Stream)) {бросить новое ioException («Не может написать изображение формата» + формат); }}}Теперь вы можете скачать сгенерированный QR -код в корневом каталоге диска D
Анализ QR -кода
Как и поколение, нам нужен вспомогательный класс (BufferedImageLuminancesource), который также предоставляется Google. Здесь я также вставляю исходный код этого класса и могу копировать и использовать его напрямую, сохраняя проблемы поиска.
BufferedImageLuminancesource Import com.google.zxing.luminancesource; импортировать java.awt.graphics2d; импортировать java.awt.geom.affineTransform; Импорт java.awt.image.bufferedImage; публичный финальный класс BufferedImageLuminancesource расширяет Luminancesource {Private Final BuffereMage Image; частный финал int остался; Частный финальный топ; 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 (ширина, высота); int sourcewidth = image.getWidth (); int sourceHeight = image.getheight (); if (left + width> sourcewidth || top + height> sourceheight) {бросить новый allosalargumentException («Прямоугольник Crop не вписывается в данные изображения.»); } for (int y = top; y <top+height; y ++) {for (int x = слева; x <слева+ширина; x ++) {if ((image.getrgb (x, y) & 0xff000000) == 0) {image.setrgb (x, y, 0xffffff); // = White}}} this.Image = new BufferedImage (SourceWidth, SourceHeight, BufferedImage.Type_byte_gray); this.image.getGraphics (). DrawMage (Image, 0, 0, NULL); this.left = осталось; this.top = top; } @Override public byte [] getRow (int y, byte [] row) {if (y <0 || y> = getheight ()) {бросить новый allosalargumentException ("Запрашиваемая строка находится вне изображения:" + y); } int width = getWidth (); if (row == null || row.length <width) {row = new Byte [width]; } image.getraster (). getDataelements (слева, топ + y, ширина, 1, ряд); вернуть ряд; } @Override public byte [] getMatrix () {int width = getWidth (); int height = getheight (); int area = ширина * высота; byte [] matrix = new Byte [область]; image.getraster (). getDatelements (слева, верх, ширина, высота, матрица); вернуть матрицу; } @Override public boolean iscropSupported () {return true; } @Override public luminancesource crop (int left, int top, int width, int height) {return new bufferedimageluminancesource (image, this.left + слева, this.top + top, width, высота); } @Override public boolean isrotatesUpported () {return true; } @Override public luminancesource rotateCounterClockweep () {int sourcewidth = image.getWidth (); int sourceHeight = image.getheight (); AffineTransform Transform = New AffineTransform (0,0, -1,0, 1,0, 0,0, 0,0, исходная власть); BufferedImage RotatedImage = New BufferedImage (SourceHeight, SourceWidth, BufferedImage.Type_byte_gray); Graphics2d g = rotatedimage.creategraphics (); g.drawimage (изображение, преобразование, ноль); g.dispose (); int width = getWidth (); вернуть новый BufferedImageLuminancesource (RotatedImage, Top, SourceWidth - (левая + ширина), getheight (), ширина); }}Код для анализа QR -кода
MultiformatReader FormatReader = new MultiformatReader (); String filePath = "Путь изображения"; File file = new File (filePath); BufferedImage Image = imageio.read (file) ;; Luminancesource Source = новый BufferedImageLuminancesource (изображение); Binarizer Binarizer = новый гибридбинаризер (источник); BinaryBitmap BinaryBitMap = новый BinaryBitMap (Binarizer); Map nts = new hashmap (); nts.put (encodehinttype.character_set, "utf-8"); Результат Result = FormatReader.Decode (BinaryBitMap, подсказки); System.out.println ("result ="+ result.tostring ()); System.out.println ("resultformat ="+ result.getBarcodeformat ()); System.out.println ("resultText ="+ result.getText ()); tch (Exception e) {e.printstacktrace ();Теперь вы можете увидеть содержание QR -кода на консоли.
Выше приведено соответствующие знания о том, как генерировать QR-коды с помощью zxing-core и их анализа. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!