رموز QR موجودة في كل مكان ، ويمكنك مسحها ضوئيًا وستحصل على هدايا. رموز QR شائعة جدًا الآن. أعتقد أن الجميع ليسوا واضحين للغاية حول كيفية إنشاء رموز QR. الآن ، سيشاركك المحرر طريقة مساعدتك في تعلم طريقة توليد رمز الاستجابة السريعة من خلال مشاركة هذه المقالة.
في الواقع ، يتم استخدام هذه الوظيفة بشكل أساسي باستخدام الجرة التي نشرتها Goggle.
1. توليد رمز الاستجابة السريعة
أضف حزمة zxing-core.jar إلى classpath.
يتطلب توليد رمز الاستجابة السريعة مساعدة فئة MatrixToImageWriter. يتم توفير هذا الفصل بواسطة Google. يمكنك نسخ الفصل إلى رمز المصدر. هنا ألصق الكود المصدري لهذه الفئة ويمكن استخدامه مباشرة.
رمز يمكنه إنشاء رمز الاستجابة السريعة مباشرة
public void test1 () يلقي استثناء {string content = "www.baidu.com" ؛ string path = "d: //" ؛ multiformatwriter multiformatwriter = new multiformatwriter () ؛ // zxing عبارة عن رمز باركي توفره Google. تلميحات الخريطة = new hashmap () ؛ Hints.put (Encodehinttype.character_set ، "UTF-8") ؛ bitmatrix bitmatrix = multiformatwriter.encode (المحتوى ، barcodeformat.qr_code ، 400 ، 400 ، تلميحات) ؛ // هذا هو حجم ملف الصورة 1 = ملف جديد (المسار ، "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 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 جديد ("لا يمكن كتابة صورة للتنسيق" + تنسيق) ؛ }}}يمكنك الآن تنزيل الدليل الجذر للقرص D لعرض رمز الاستجابة السريعة التي تم إنشاؤها
تحليل رمز الاستجابة السريعة
مثل الجيل ، نحتاج إلى فئة مساعدة (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 () ، العرض) ؛ }}رمز لتحليل رمز الاستجابة السريعة
multiformatreader orportreader = جديد متعدد الأشكال () ؛ سلسلة filepath = "مسار الصورة" ؛ ملف الملف = ملف جديد (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 ()) ؛ TCH (استثناء E) {E.PrintStackTrace () ؛الآن بهذه الطريقة يمكنك رؤية محتوى رمز الاستجابة السريعة على وحدة التحكم.
ما سبق هو المعرفة ذات الصلة حول كيفية إنشاء رموز QR عن طريق zxing-core وتحليلها. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!