ZXING هي أداة تحليل حول الباركود (رمز واحد R ، رمز الاستجابة السريعة) التي توفرها Google. ويوفر طرق لتوليد وتحليل رموز QR. الآن سأقدم بإيجاز استخدام Java لإنشاء وتحليل رموز QR باستخدام Zxing.
1. توليد رمز الاستجابة السريعة
1.1 أضف حزمة zxing-core.jar إلى classpath.
1.2 يتطلب توليد رمز الاستجابة السريعة مساعدة من فئة MatrixToImageWriter. يتم توفير هذا الفصل بواسطة Google. يمكنك نسخ الفصل إلى رمز المصدر. هنا ألصق الكود المصدري لهذه الفئة ويمكن استخدامه مباشرة.
استيراد com.google.zxing.common.bitmatrix ؛ استيراد javax.imageio.imageio ؛ استيراد java.io.file ؛ استيراد java.io.outputStream ؛ استيراد java.io.ioException ؛ استيراد java.awt.image.bufferedImage ؛ Public Class Class MatrixtoImageWriter {Private Static Final Int Black = 0xFF000000 ؛ خاص ثابت نهائي int white = 0xffffffff ؛ MatrixToImageWriter () {} الثابتة العامة bufferedimage tobufferedimage (مصفوفة bitmatrix) {int width = matrix.getWidth () ؛ ارتفاع int = matrix.getheight () ؛ صورة bufferedImage = جديد bufferedImage (العرض ، الارتفاع ، bufferedImage.type_int_rgb) ؛ لـ (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 {bufferedImage Image = tobufferedImage (matrix) ؛ if (! imageio.write (صورة ، تنسيق ، ملف)) {رمي ioException جديد ("لا يمكن كتابة صورة للتنسيق" + format + "إلى" + file) ؛ }} public static void writeToStream (مصفوفة bitmatrix ، تنسيق السلسلة ، دفق outputstream) يلقي ioexception {bufferedImage Image = tobufferedImage (matrix) ؛ if (! imageio.write (صورة ، تنسيق ، دفق)) {رمي ioException جديد ("لا يمكن كتابة صورة للتنسيق" + تنسيق) ؛ }}}1.3 اكتب رمز التنفيذ الذي يولد رمز الاستجابة السريعة
Try {String Content = "120605181003 ؛ http: //www.cnblogs.com/jtmjx" ؛ string path = "c:/user/administrator/desktop/testimage" ؛ multiformatwriter multiformatwriter = new multiformatwriter () ؛ تلميحات الخريطة = new hashmap () ؛ Hints.put (Encodehinttype.character_set ، "UTF-8") ؛ bitmatrix bitmatrix = multiformatwriter.encode (المحتوى ، barcodeformat.qr_code ، 400 ، 400 ، تلميحات) ؛ ملف file1 = ملف جديد (المسار ، "nambeginner.jpg") ؛ MatrixToImageWriter.writetofile (bitmatrix ، "jpg" ، file1) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }الآن بعد التشغيل ، يمكنك إنشاء صورة رمز الاستجابة السريعة. أليس الأمر بسيطًا جدًا؟ بعد ذلك ، دعونا نلقي نظرة على كيفية تحليل رمز الاستجابة السريعة
2. تحليل رمز الاستجابة السريعة
2.1 أضف حزمة zxing-core.jar إلى classpath.
2.2 مثل الجيل ، نحتاج إلى فئة مساعدة (BufferEdimageluminancesource) ، والتي توفرها Google أيضًا. أنا هنا أيضًا ألصق الكود المصدري لهذه الفئة وأستطيع نسخه واستخدامه مباشرة ، مع توفير مشكلة البحث.
bufferedimageluminancesource import com.google.zxing.luminancesource ؛ استيراد java.awt.graphics2d ؛ استيراد java.awt.geom.affinetransform ؛ استيراد java.awt.image.bufferedImage ؛ الطبقة النهائية العامة bufferedimageluminancesource يمتد luminancesource {private final bufferedimage صورة ؛ غادر int النهائي الخاص ؛ قمة int النهائية الخاصة ؛ public bufferedimageluminancesource (صورة bufferedImage) {هذا (الصورة ، 0 ، 0 ، image.getWidth () ، image.getheight ()) ؛ } public bufferedimageluminancesource (صورة bufferedImage ، int اليسار ، int top ، عرض int ، int leight) {super (width ، height) ؛ int sourceWidth = image.getWidth () ؛ int souteheight = image.getheight () ؛ if (Left + Width> sourceWidth || Top + height> sourceHight) {رمي جديد غير alficalArgumentException ("لا يتناسب مستطيل المحاصيل داخل بيانات الصورة.") ؛ } لـ (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 ، 0xfffff) ؛ // = white}}} this.image = new BufferEdImage (sourceWidth ، sourceHight ، bufferedImage.type_byte_gray) ؛ this.image.getGraphics (). drawImage (Image ، 0 ، 0 ، null) ؛ this.left = اليسار ؛ this.top = top ؛ } Override Public Byte [] getRow (int y ، byte [] row) {if (y <0 || y> = getheight ()) {رمي new alficalargumentexception ("الصف المطلوب خارج الصورة:" + 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 = getheight () ؛ int مساحة = العرض * الارتفاع ؛ Byte [] Matrix = New Byte [Area] ؛ Image.getRaster (). getDataelements (يسار ، أعلى ، العرض ، الارتفاع ، المصفوفة) ؛ مصفوفة العودة ؛ } Override public boolean isCropSupported () {return true ؛ } Override public luminancesource crip (int left ، int top ، width int ، int left) {return new BufferedImageluminancesource (Image ، this.left + left ، this.top + top ، width ، height) ؛ } Override public boolean isrotatesupported () {return true ؛ } Override public luminancesource rotatecounterclockWise () {int sourceWidth = image.getWidth () ؛ int souteheight = image.getheight () ؛ AffinetRans Transform = Affinetransform جديد (0.0 ، -1.0 ، 1.0 ، 0.0 ، 0.0 ، SourceWidth) ؛ bufferedImage rotatedImage = جديد bufferedImage (sourceHight ، sourceWidth ، bufferedImage.type_byte_gray) ؛ graphics2d g = rotatedimage.creategraphics () ؛ G.DrawImage (الصورة ، التحويل ، فارغة) ؛ G.Dispose () ؛ عرض int = getWidth () ؛ إرجاع جديد BufferedImageluminancesource (RotatedImage ، Top ، SourceWidth - (Left + Width) ، Getheight () ، العرض) ؛ }}2.3 اكتب رمز التنفيذ الذي يحلل رمز الاستجابة السريعة
حاول {multiformatreadererererer = new multiformatreader () ؛ String filepath = "c: /users/administrator/desktop/testimage/test.jpg" ؛ ملف الملف = ملف جديد (FilePath) ؛ صورة BufferedImage = imageio.read (ملف) ؛؛ مصدر luminancesource = جديد bufferedimageluminancesource (صورة) ؛ binarizer binarizer = new hybridbinarizer (source) ؛ binarybitmap binarybitmap = جديد binarybitmap (binarizer) ؛ تلميحات الخريطة = new hashmap () ؛ Hints.put (Encodehinttype.character_set ، "UTF-8") ؛ نتيجة النتيجة = formatreader.decode (BinaryBitMap ، تلميحات) ؛ system.out.println ("result ="+ result.toString ()) ؛ System.out.println ("resultFormat ="+ result.getBarcodeFormat ()) ؛ system.out.println ("resultText ="+ result.getText ()) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }الآن بعد التشغيل ، يمكنك أن ترى أن وحدة التحكم تطبع محتوى رمز الاستجابة السريعة.
حتى الآن ، استخدم Zxing Zxing لتوليد وحالة رمز الاستجابة السريعة وتم الانتهاء من العرض التوضيحي ، وتصنيع المذكرات لنفسك بشكل أساسي ، وفي الوقت نفسه جعل الراحة للمحتاجين. ههههههههه
المثال البسيط أعلاه لـ Java باستخدام Zxing لإنشاء رموز QR هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.