QR -код - это изображение штрих -кода, которое использует геометрические фигуры черно -белой плоскости для записи текста, изображений, URL и другой информации с помощью соответствующих алгоритмов кодирования. Следующий рисунок
Особенности QR -кода:
1. Кодирование высокой плотности, большая информационная емкость
Он может вместить до 1850 года заглавных букв или 2710 чисел или 1108 байтов, или более 500 китайских иероглифов, что примерно в десятки раз больше, чем обычная информация о штрих -коде.
2. широкий диапазон кодировки
Этот штрих -код может кодировать оцифрованную информацию, такую как изображения, звуки, тексты, подписи, отпечатки пальцев и т. Д., И выражать их в штрих -кодах; Они могут представлять текст на нескольких языках; И они могут представлять данные изображения.
3. Сильная допустимость допуска неисправности и коррекции ошибок
Это позволяет двумерному штрих-коду быть должным образом поврежден из-за перфорации, осквернения и т. Д., И информация все еще может быть восстановлена, если область повреждения достигает 50%.
4. Высокая надежность декодирования
Он намного ниже, чем частота ошибок обычного декодирования штрих-кода в двух частях на миллион, а уровень ошибок составляет не более чем на миллион.
5. Меры шифрования могут быть введены
Хорошая конфиденциальность и противодействие.
6. недорогой, прост, долговечный
Из -за вышеупомянутых характеристик QR -коды становятся все более популярными и более широко используются (подробности см. Энциклопедию Baidu, введение не в центре внимания этой статьи). Таким образом, освоение того, как разработать QR -коды, является очень хорошим резервом знаний. Поэтому эта статья объяснит вам, как генерировать и проанализировать QR -коды.
1. Ява
Требуемый пакет JAR: qrcode.jar
http://sourceforge.jp/projects/qrcode/
Класс TwodimensionCode: QR -код
Пакет qrcode; импортировать java.awt.color; import java.awt.graphics2d; import java.awt.image.bufferedimage; import java.io.file; импорт java.io.ioexception; import java.io.InputStream; импорт java.io.outputStream; importio.Imageio jp.sourceforge.qrcode.qrcodedecoder; import jp.sourceforge.qrcode.exception.decodingfailedException; import com.swetake.util.qrcode; открытый класс TwodimensionCode { / *** Создание кода QR (QRCode) Picture* @param Содержание Содержание. EncoderQRCode (String Content, String imgpath) {this.encoderqrcode (content, imgpath, "png", 7); } / *** Сгенерировать QR -код (qrCode) изображение* @param Содержимое содержимого содержимого* @param Выходное выходное потоку* / public void encoderqrcode (строковое содержимое, выходное сигнал) {this.encoderqrcode (контент, выход, "png", 7); } / *** Сгенерировать QR -код (qrCode) изображение* @param Содержимое содержимого содержимого* @param imgpath patch* @param imgtype picture type* / public void encoderqrcode (строка, строка imgpath, string imgtype) {this.encoderqrcode (content, imgpath, imgtype, 7); } / *** Сгенерировать QR -код (qrCode) изображение* @param Содержимое содержимого содержимого* @param Выходное выходное потоки* @param imgtype image type* / public void encoderqrCode (строковое содержимое, выходное производство, string imgtype) {this.encoderqrcode (content, output, imgtype, 7); } / *** Сгенерировать QR -код (qrCode) Image* @param Содержимое содержимого содержимого содержимого* @param imgpath patch* @param imgtype image type* @param size qr size* / public void encoderqrcode (String Content, String imgpath, String imgtype, int size) {try {bufferedImag imgtype, размер); File imgfile = new File (imgpath); // Сгенерировать QR -код QRCode Image Image.Write (bufimg, imgtype, imgfile); } catch (Exception e) {e.printstackTrace (); }} / *** Сгенерировать QR -код (qrCode) Image* @param Содержимое содержимого содержимого* @param Выходное выходное потоко размер); // генерировать QR -код QRCode Image ImageIo.Write (bufimg, imgtype, output); } catch (Exception e) {e.printstackTrace (); }} / *** Общедоступный метод для генерации QR -кода (qrCode) изображения* @param Содержание содержимого* @param imgtype тип изображения* @param size qr size size* @return* / private buferemage qrcodecommon (String Content, String imgtype, int size) {bufferemage bufimg = null; try {qrcode qrcodehandler = new qrcode (); // Установите частоту ошибок кода QR, который может быть выбран как L (7%), M (15%), Q (25%) и H (30%). Чем выше частота ошибок, тем меньше информации может быть сохранена, но чем меньше потребность в QR Code Clarity qrcodehandler.setQrcodeerrorRcorct ('m'); qrcodehandler.setqrcodeencodemode ('b'); // Установите размер QR-кода с диапазоном значений 1-40. Чем больше значение, тем больше размер, тем больше информация вы можете сохранить qrcodehandler.setqrcodeversion (размер); // Получение байтового массива контента и установить формат кодирования Byte [] contentBytes = content.getBytes ("UTF-8"); // размер изображения int imgsize = 67 + 12 * (размер - 1); bufimg = new BufferedImage (imgsize, imgsize, bufferemage.type_int_rgb); Graphics2d gs = bufimg.creategraphics (); // установить цвет фона gssetbackground (color.white); gs.clearrect (0, 0, imgsize, imgsize); // установить цвет изображения> Черный Gs.setColor (color.black); // Настройка смещения, не настройка может привести к ошибкам анализа int pixoff = 2; // Вывод содержимого> QR -код if (contentBytes.length> 0 && contentBytes.length <800) {boolean [] [] codeout = qrcodehandler.calqrcode (contentBytes); for (int i = 0; i <codeout.length; i ++) {for (int j = 0; j <codeout.length; j ++) {if (codeout [j] [i]) {gs.fillrect (j * 3+pixoff, i * 3+pixoff, 3, 3); }}}} else {бросить новое исключение ("qrCode Content Bytes length =" + contentBytes.length + "не в [0, 800]."); } gs.dispose (); bufimg.flush (); } catch (Exception e) {e.printstackTrace (); } return bufimg; } / ** * анализировать QR -код (qrCode) * @param imgpath path * @return * / public String decoderqrcode (string imgpath) {// qrcode qr -код файл файл imagefile = new File (imgpath); BufferedImage bufimg = null; Строка содержимого = null; try {bufimg = imageio.read (imagefile); Qrcodedecoder decoder = new qrcodedecoder (); content = new String (decoder.decode (new TwodimensionCodeimage (bufimg)), "UTF-8"); } catch (ioException e) {System.out.println ("error:" + e.getMessage ()); e.printstacktrace (); } catch (decodingfailedException dfe) {system.out.println ("error:" + dfe.getmessage ()); dfe.printstacktrace (); } вернуть контент; } / ** * parsing qr -код (qrcode) * @param входной входной поток * @return * / public String decoderQrCode (InputStream Input) {BuffereMage bufimg = null; Строка содержимого = null; try {bufimg = imageio.read (input); Qrcodedecoder decoder = new qrcodedecoder (); content = new String (decoder.decode (new TwodimensionCodeimage (bufimg)), "UTF-8"); } catch (ioException e) {System.out.println ("error:" + e.getMessage ()); e.printstacktrace (); } catch (decodingfailedException dfe) {system.out.println ("error:" + dfe.getmessage ()); dfe.printstacktrace (); } вернуть контент; } public static void main (string [] args) {string imgpath = "g: /tddownload/michael_qrcode.png"; String encodercontent = "Привет, большой, маленький, добро пожаловать в qrcode!" + "/nmyblog [http://sjsky.iteye.com]" + "/nemail [[email protected]]"; Обработчик TwoDimensionCode = новый TwoDimensionCode (); Handler.encoderqrCode (encodercontent, imgpath, "png"); // try {// outputStream output = new fileOutputStream (imgpath); // handler.encoderqrcode (content, output); //} catch (Exception e) {// e.printstacktrace (); //} System.out.println ("============= Concoder успех"); String decodercontent = handler.decoderqrcode (imgpath); System.out.println («Результат анализа следующего:»); System.out.println (decodercontent); System.out.println ("============ Успех декодера !!!"); }}Класс TwodimensionCodeImage: QR -код объект изображения
Пакет qrcode; import java.awt.image.bufferedImage; import jp.sourceforge.qrcode.data.qrcodeimage; открытый класс TwodimensionCodeimage Предупреждает qrcodeimage {BuffereMage bufimg; public twodimensionCodeimage (BufferedImage Bufimg) {this.bufimg = bufimg; } @Override public int getheight () {return bufimg.getheight (); } @Override public int getPixel (int x, int y) {return bufimg.getrgb (x, y); } @Override public int getWidth () {return bufimg.getWidth (); }}Выше приведено информация для генерации и анализа QR -кодов Java. Мы продолжим добавлять их позже. Спасибо за поддержку этого сайта!