精华内容
下载资源
问答
  • 众所周知,爪哇,是一种神奇的编程语言,用JAVA...本节主要讲JAVA实现二维码的编码与解码。 废话也就那么多了,转入正题。 需要的JAR包如下。 编码lib:Qrcode_swetake.jar (官网介绍-- http://www.swetake.com/q

    众所周知,爪哇,是一种神奇的编程语言,用JAVA实现某一个功能,只是随便上网找一些对应的实现JAR包即可,于是,有了像JAR114这样专门提供给爪哇程序猿的下载的那么一堆网站。

    本节主要讲JAVA实现二维码的编码与解码。

    废话也就那么多了,转入正题。

    需要的JAR包如下。

    编码lib:Qrcode_swetake.jar   (官网介绍-- http://www.swetake.com/qr/index-e.html)             

    解码lib:qrcode.jar                (官网介绍-- http://sourceforge.jp/projects/qrcode/)

     

    【一】、编码:

    QRCodeEncoderHandler.java

    Java代码 

    package michael.qrcode; 

     

    import java.awt.Color; 

    import java.awt.Graphics2D; 

    importjava.awt.image.BufferedImage; 

    import java.io.File; 

     

    import javax.imageio.ImageIO; 

     

    import com.swetake.util.Qrcode; 

     

    /**

     * 二维码生成器

     * @blog http://sjsky.iteye.com

     * @author Michael

     */ 

    public class QRCodeEncoderHandler{ 

     

        /**

         * 生成二维码(QRCode)图片

         * @paramcontent

         * @paramimgPath

         */ 

        public voidencoderQRCode(String content, String imgPath) { 

           try { 

     

               Qrcode qrcodeHandler = new Qrcode(); 

               qrcodeHandler.setQrcodeErrorCorrect('M'); 

               qrcodeHandler.setQrcodeEncodeMode('B'); 

               qrcodeHandler.setQrcodeVersion(7); 

     

               System.out.println(content); 

               byte[] contentBytes = content.getBytes("gb2312"); 

     

               BufferedImage bufImg = new BufferedImage(140, 140, 

                       BufferedImage.TYPE_INT_RGB); 

     

               Graphics2D gs = bufImg.createGraphics(); 

     

               gs.setBackground(Color.WHITE); 

               gs.clearRect(0, 0, 140, 140); 

     

               // 设定图像颜色> BLACK 

               gs.setColor(Color.BLACK); 

     

               // 设置偏移量 不设置可能导致解析出错 

               int pixoff = 2; 

               // 输出内容> 二维码 

               if (contentBytes.length > 0 && contentBytes.length < 120) { 

                   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 { 

                   System.err.println("QRCode content bytes length = " 

                           +contentBytes.length + " not in [ 0,120 ]. "); 

               } 

     

               gs.dispose(); 

               bufImg.flush(); 

     

               File imgFile = new File(imgPath); 

     

               // 生成二维码QRCode图片 

               ImageIO.write(bufImg, "png", imgFile); 

     

           } catch (Exception e) { 

               e.printStackTrace(); 

           } 

     

        } 

     

        /**

         * @param argsthe command line arguments

         */ 

        public static voidmain(String[] args) { 

           String imgPath = "D:/test/twocode/Michael_QRCode.png"; 

     

           String content = "Hello 大大、小小,welcome to QRCode!" 

                   + "\nMyblog [ http://sjsky.iteye.com ]" 

                   + "\nEMail [ sjsky007@gmail.com ]" + "\nTwitter [ @suncto]"; 

     

           QRCodeEncoderHandler handler = new QRCodeEncoderHandler(); 

           handler.encoderQRCode(content, imgPath); 

     

           System.out.println("encoder QRcode success"); 

        } 

     

    可用手机二维码扫描软件 对运行后生成的二维码图片进行验证

    下面是解码代码

    【二】、解码:

     QRCodeDecoderHandler.java

    Java代码 

    package michael.qrcode; 

     

    importjava.awt.image.BufferedImage; 

    import java.io.File; 

    import java.io.IOException; 

     

    import javax.imageio.ImageIO; 

     

    importjp.sourceforge.qrcode.QRCodeDecoder; 

    importjp.sourceforge.qrcode.data.QRCodeImage; 

    importjp.sourceforge.qrcode.exception.DecodingFailedException; 

     

    /**

     * @blog http://sjsky.iteye.com

     * @author Michael

     */ 

    public class QRCodeDecoderHandler{ 

     

        /**

         * 解码二维码

         * @paramimgPath

         * @returnString

         */ 

        public StringdecoderQRCode(String imgPath) { 

     

           // QRCode 二维码图片的文件 

           File imageFile = new File(imgPath); 

     

           BufferedImage bufImg = null; 

           String decodedData = null; 

           try { 

               bufImg = ImageIO.read(imageFile); 

     

               QRCodeDecoder decoder = new QRCodeDecoder(); 

               decodedData = new String(decoder.decode(new J2SEImage(bufImg))); 

     

               // try { 

               // System.out.println(newString(decodedData.getBytes("gb2312"), 

               // "gb2312")); 

               // } catch (Exception e) { 

               // // TODO: handle exception 

               // } 

           } catch (IOException e) { 

               System.out.println("Error: " + e.getMessage()); 

               e.printStackTrace(); 

           } catch (DecodingFailedException dfe) { 

               System.out.println("Error: " + dfe.getMessage()); 

               dfe.printStackTrace(); 

           } 

           return decodedData; 

        } 

     

        /**

         * @param argsthe command line arguments

         */ 

        public static voidmain(String[] args) { 

           QRCodeDecoderHandler handler = new QRCodeDecoderHandler(); 

           String imgPath = "d:/test/twocode/Michael_QRCode.png"; 

           String decoderContent = handler.decoderQRCode(imgPath); 

           System.out.println("解析结果如下:"); 

           System.out.println(decoderContent); 

           System.out.println("========decoder success!!!"); 

        } 

     

        class J2SEImageimplements QRCodeImage { 

           BufferedImage bufImg; 

     

           public J2SEImage(BufferedImage bufImg) { 

               this.bufImg = bufImg; 

           } 

     

           public int getWidth() { 

               return bufImg.getWidth(); 

           } 

     

           public int getHeight() { 

               return bufImg.getHeight(); 

           } 

     

           public int getPixel(int x, int y) { 

               return bufImg.getRGB(x, y); 

           } 

     

        } 

     

    运行结果如下(解码出的内容和之前输入的内容一致 ):

    解析结果如下:

    Hello 大大、小小,welcome to QRCode!

    Myblog [ http://sjsky.iteye.com ]

    EMail [ sjsky007@gmail.com ]

    Twitter [ @suncto ]

    ========decoder success!!!

     

    展开全文
  • <blockquote> 本文中实现二维码的操作依赖于google的zxing,需要添加的jar包有:core.jar 和 javase.jar</p> 依赖的类有:</p> <div> <pre><span style="color: #0000ff">import</span> javax.imageio.ImageIO;...

    <blockquote> <p>本文中实现二维码的操作依赖于google的zxing,需要添加的jar包有:core.jar 和 javase.jar</p> <p>依赖的类有:</p> <div> <pre><span style="color: #0000ff">import</span> javax.imageio.ImageIO;

    <span style="color: #0000ff">import</span> com.google.zxing.BarcodeFormat; <span style="color: #0000ff">import</span> com.google.zxing.BinaryBitmap; <span style="color: #0000ff">import</span> com.google.zxing.DecodeHintType; <span style="color: #0000ff">import</span> com.google.zxing.EncodeHintType; <span style="color: #0000ff">import</span> com.google.zxing.LuminanceSource; <span style="color: #0000ff">import</span> com.google.zxing.MultiFormatReader; <span style="color: #0000ff">import</span> com.google.zxing.MultiFormatWriter; <span style="color: #0000ff">import</span> com.google.zxing.ReaderException; <span style="color: #0000ff">import</span> com.google.zxing.Result; <span style="color: #0000ff">import</span> com.google.zxing.client.j2se.BufferedImageLuminanceSource; <span style="color: #0000ff">import</span> com.google.zxing.client.j2se.MatrixToImageWriter; <span style="color: #0000ff">import</span> com.google.zxing.common.BitMatrix; <span style="color: #0000ff">import</span> com.google.zxing.common.HybridBinarizer;</pre>

    </div>

    <br />

    <h4>二维码编码:</h4>

    <div> <pre><span style="color: #008000">/** * 二维码编码 * @param str 需要编码的字符串 * @return */</span> @SuppressWarnings(&quot;<span style="color: #8b0000">unchecked</span>&quot;) <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> File encode(String str) { <span style="color: #0000ff">try</span> { SimpleDateFormat sdDateFormat = <span style="color: #0000ff">new</span> SimpleDateFormat(&quot;<span style="color: #8b0000">yyyyMMddhhmmss</span>&quot;); String path = &quot;<span style="color: #8b0000">./encode</span>&quot; + sdDateFormat.format(<span style="color: #0000ff">new</span> Date()) + &quot;<span style="color: #8b0000">.png</span>&quot;; <span style="color: #0000ff">int</span> width = 180; <span style="color: #0000ff">int</span> height = 160; Hashtable hints = <span style="color: #0000ff">new</span> Hashtable(); hints.put(EncodeHintType.CHARACTER_SET, &quot;<span style="color: #8b0000">utf-8</span>&quot;); BitMatrix byteMatrix; byteMatrix = <span style="color: #0000ff">new</span> MultiFormatWriter().encode(str,BarcodeFormat.QR_CODE, width, height,hints); File file = <span style="color: #0000ff">new</span> File(path); MatrixToImageWriter.writeToFile(byteMatrix, &quot;<span style="color: #8b0000">png</span>&quot;, file); <span style="color: #0000ff">return</span> file; } <span style="color: #0000ff">catch</span> (Exception e) { e.printStackTrace(); <span style="color: #0000ff">return</span> <span style="color: #0000ff">null</span>; } }</pre> </div>

    <br />

    <h4>二维码解码:</h4>

    <div> <pre><span style="color: #008000">/** * 二维码解码 * @param file 需要解码的文件(如图片) * @return */</span> @SuppressWarnings(&quot;<span style="color: #8b0000">unchecked</span>&quot;) <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> Result decode(File file) { <span style="color: #0000ff">try</span> { BufferedImage image; <span style="color: #0000ff">try</span> { image = ImageIO.read(file); <span style="color: #0000ff">if</span> (image == <span style="color: #0000ff">null</span>) { System.out.println(&quot;<span style="color: #8b0000">Could not decode image</span>&quot;); } LuminanceSource source = <span style="color: #0000ff">new</span> BufferedImageLuminanceSource(image); BinaryBitmap bitmap = <span style="color: #0000ff">new</span> BinaryBitmap(<span style="color: #0000ff">new</span> HybridBinarizer( source)); Result result; Hashtable hints = <span style="color: #0000ff">new</span> Hashtable(); hints.put(DecodeHintType.CHARACTER_SET, &quot;<span style="color: #8b0000">utf-8</span>&quot;); result = <span style="color: #0000ff">new</span> MultiFormatReader().decode(bitmap, hints); <span style="color: #0000ff">return</span> result; } <span style="color: #0000ff">catch</span> (IOException ioe) { System.out.println(ioe.toString()); <span style="color: #0000ff">return</span> <span style="color: #0000ff">null</span>; } <span style="color: #0000ff">catch</span> (ReaderException re) { System.out.println(re.toString()); <span style="color: #0000ff">return</span> <span style="color: #0000ff">null</span>; } } <span style="color: #0000ff">catch</span> (Exception ex) { <span style="color: #0000ff">return</span> <span style="color: #0000ff">null</span>; } }</pre> </div></blockquote>

    转载于:https://my.oschina.net/sorthWindow/blog/110902

    展开全文
  • 二维码之所以能够封装图片、文件等主要是把图片、文件等URL编码成二维码,用户一扫手机自动访问。 上一次在《【jQuery】使用jquery-qrcode插件把网址转化成...这次将在Java中实现二维码的编码与解码输出到磁盘上,

    二维码之所以能够封装图片、文件等主要是把图片、文件等URL编码成二维码,用户一扫手机自动访问。

    上一次在《【jQuery】使用jquery-qrcode插件把网址转化成二维码,手机扫一扫即可访问》(点击打开链接)使用jquery-qrcode插件配合jquery能够把网址编码成字符串,在网址上显示编码后的二维码,移动设备能够直接扫一扫。

    这次将在Java中实现对二维码的编码与解码输出到磁盘上,无需在网页中进行,而且还可以解码,但是步骤比较复杂而已。

    Java自身当然没有二维码的编码与解码的功能,需要下载两个插件,也就是额外的jar包,一个用来编码的,把字符串、网址、URL等转化成二维码的com.swetake.util.Qrcode,可以从它的官网下载(点击打开链接),我也为大家上传了一份(点击打开链接),另一个用来解码,把二维码转化成原来的字符串、网址、URL等的jp.sourceforge.qrcode.data.QRCodeImage,这个也可以从它的官网中下载(点击打开链接),我也为大家上传了一份(点击打开链接

    编码的com.swetake.util.Qrcode下载之后是一个qrcode_java0.50beta10.tar.gz,最新版的Winrar可以解压,解压之后把里面lib目录下的qrcode.jar取出来,改个名字叫qrcodeencoding.jar,解码的jp.sourceforge.qrcode.data.QRCodeImage下载之后的是一个redir.zip,解压之后同样把里面lib目录下的qrcode.jar取出来,改个名字叫qrcodedecoding.jar。本来这些第三方jar包,无需修改可以扔到Java工程中使用。但是,这两家日本公司,实在是太有缘了,开发的二维码包撞衫了。因此,要改好名字才能放到一起。改成其他名字也行,反正就不能同时叫qrcode,我的编码叫qrcode.jar,译码叫qrcodedecoding.jar,主要是一开始不知道两个jar的名字相同,又引入了编码的com.swetake.util.Qrcode,才没改编码包的名字。

    在Eclipse中新建一个java工程,叫什么随意,我的叫qrcode,之后最后手动打开eclipse的工程目录,找到这个文件夹,在里面新建一个lib,把qrcodeencoding.jar与qrcodedecoding.jar放进去,然后在Eclipse中刷新一下这个工程,右键点最下面的一项属性,在Java Build Path中的Libraries选择Add Jars..如果没有拷到工程目录下则选择Add External Jars.添加这两个包:


    之后先在src下的package下新建一个QRcode.java,也就是一个class。于是,整个工程目录结构如下所示,此时应该没有test.png,test.png是后来生成的二维码文件:


    准备工作写好之后就能够正式写代码。

    直接贴上全代码,则一行一行给大家剖析,是怎么做的。

    package qrcode;
    
    import java.awt.*;
    import java.awt.image.*;
    import java.io.*;
    
    import javax.imageio.*;
    
    import jp.sourceforge.qrcode.QRCodeDecoder;
    import jp.sourceforge.qrcode.data.QRCodeImage;
    
    import com.swetake.util.Qrcode;
    
    public class QRcode {
    	public static void makeQRcode(String content, String imgPath) {
    		Qrcode qrcode = new Qrcode();
    		qrcode.setQrcodeErrorCorrect('M');
    		qrcode.setQrcodeEncodeMode('B');
    		qrcode.setQrcodeVersion(7);
    		BufferedImage bufImg = new BufferedImage(325, 325,
    				BufferedImage.TYPE_INT_RGB);
    		Graphics2D gs = bufImg.createGraphics();
    		gs.setBackground(Color.WHITE);
    		gs.clearRect(0, 0, 325, 325);
    		gs.setColor(Color.BLACK);
    		try {
    			byte[] contentBytes = content.getBytes("utf-8");
    			if (0 < contentBytes.length && contentBytes.length < 120) {
    				boolean[][] codeOut = qrcode.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 * 7 + 5, i * 7 + 5, 7, 7);
    						}
    					}
    				}
    			}
    			gs.dispose();
    			bufImg.flush();
    			File imgFile = new File(imgPath);
    			//生成为png
    			ImageIO.write(bufImg, "png", imgFile);
    			System.out.println("生成成功!");
    
    		} catch (Exception e) {
    			System.out.println("出错了!");
    		}
    
    	}
    
    	public static String decodeQRCode(String imgPath) throws IOException {
    		File imageFile = new File(imgPath);
    		BufferedImage bufImg = null;
    		String decodedData = null;
    		bufImg = ImageIO.read(imageFile);
    		QRCodeDecoder decoder = new QRCodeDecoder();
    		decodedData = new String(decoder.decode(new J2SEImage(bufImg)));
    		System.out.println("解析成功!");
    		return decodedData;
    	}
    
    	public static void main(String args[]) throws IOException {
    		String content = "http://www.a.com";
    		File directory = new File("");
    		String imgPath = directory.getCanonicalPath() + "\\test.png";
    		makeQRcode(content, imgPath);
    		System.out.println(decodeQRCode(imgPath));
    	}
    
    }
    
    class J2SEImage implements QRCodeImage {
    	BufferedImage bufImg;
    
    	public J2SEImage(BufferedImage bufImg) {
    		this.bufImg = bufImg;
    	}
    
    	public int getWidth() {
    		return bufImg.getWidth();
    	}
    
    	public int getHeight() {
    		return bufImg.getHeight();
    	}
    
    	public int getPixel(int x, int y) {
    		return bufImg.getRGB(x, y);
    	}
    }
    

    1、首先在头部引入:

    import java.awt.*;
    import java.awt.image.*;
    import java.io.*;
    import com.swetake.util.Qrcode;

    2、然后写makeQRcode这个类,代码如下:

    	//由于这个类中同时有主函数,所以要加上static属性
    	/*
    	 * @content 要编码的内容
    	 * @imgPath 二维码生成的路径
    	 */
    	//据说上面这种说明类参数注释方法,符合名企标准,╮(╯▽╰)╭你TMD看懂就行了
    	public static void makeQRcode(String content, String imgPath) {
    		//以下很多是指定动作,不为什么,这个类就要这样写,
    		//可以改的部分我会注释
    		Qrcode qrcode = new Qrcode();
    		//这里是容错率,有L,M,Q三种,L为最小,一般如果你还要在二维码上面加图片,就用Q
    		//注意这里必须使用单引号,因为这里是char或者int类型,而不是String类型
    		qrcode.setQrcodeErrorCorrect('M');
    		qrcode.setQrcodeEncodeMode('B');
    		qrcode.setQrcodeVersion(7);
    		//新建一个325x325px的图像,这个大小不是说改就改的,有讲究的,与下面gs.fillRect语句相关联
    		BufferedImage bufImg = new BufferedImage(325, 325,
    				BufferedImage.TYPE_INT_RGB);
    		Graphics2D gs = bufImg.createGraphics();
    		//图像的背景色是白色
    		gs.setBackground(Color.WHITE);
    		//这里的325x325必须与上面BufferedImage bufImg = new BufferedImage(325, 325, BufferedImage.TYPE_INT_RGB);对应
    		//上面是325x325你这里必须是多少
    		gs.clearRect(0, 0, 325, 325);
    		//二维码的颜色是黑色
    		gs.setColor(Color.BLACK);
    		//它丫不抛出,不让编译通过╮(╯▽╰)╭
    		try {
    			//编码方式为utf-8,现在还写gb2312与gbk那就是作死,都什么年代了,编码也全球化了!
    			byte[] contentBytes = content.getBytes("utf-8");
    			//可以编码的字符串长度0-120字节,二维码的固定长度来的,别改
    			if (0 < contentBytes.length && contentBytes.length < 120) {
    				boolean[][] codeOut = qrcode.calQrcode(contentBytes);
    				for (int i = 0; i < codeOut.length; i++) {
    					for (int j = 0; j < codeOut.length; j++) {
    						if (codeOut[j][i]) {
    							//这里是每一个点为7x7
    							//这个7统一改,如果你要每一个点为6x6,那么这句必须写成gs.fillRect(j * 6 + 5, i * 6 + 5, 6, 6);
    							//那个5是边缘的留白,就是这个二维码外面还有一些白色的边框,如果这个数是0,紧贴图片边缘据说会出错
    							//设置为0我没试过,只是为了好看留5px的空白
    							//每个点为7x7,还有5px的留白,得出图片大小为7*45+5*2=325
    							//如果你每个点是6*6,留白3px,那么图片大小就是6*45+3*2=276。
    							//也就是上面的BufferedImage bufImg = new BufferedImage(325, 325, BufferedImage.TYPE_INT_RGB);与gs.clearRect(0, 0, 325, 325);自己改好
    							//这公式中的45与2是固定的,二维码就是这样,不为什么。
    							gs.fillRect(j * 7 + 5, i * 7 + 5, 7, 7);
    						}
    					}
    				}
    			}
    			gs.dispose();
    			bufImg.flush();
    			File imgFile = new File(imgPath);
    			//生成为png
    			ImageIO.write(bufImg, "png", imgFile);
    			System.out.println("生成成功!");
    
    		} catch (Exception e) {
    			System.out.println("出错了!");
    		}
    
    	}
    


    3、然后下面的主函数写入要编码的字符串,比如http://www.a.com这个网址,与保存的图片目录,比如当前工程目录,就能完成二维码的编码工作:

    	public static void main(String args[]) throws IOException {
    		//要编码的字符串
    		String content = "http://www.a.com";
    		//取出当前的工程目录,并指明保存文件名为test.png
    		File directory = new File("");
    		String imgPath = directory.getCanonicalPath() + "\\test.png";
    		//执行makeQRcode编码的方法
    		makeQRcode(content, imgPath);
    	}

    主函数需要抛出异常是因为用到了File中的取工程目录函数,它JAVA害怕取不到工程目录会出错


    4、下面进行二维码的解码工作,首先在文件头引入

    import javax.imageio.*;
    
    import jp.sourceforge.qrcode.QRCodeDecoder;
    import jp.sourceforge.qrcode.data.QRCodeImage;


    5、先在文件的最下方完成QRCodeImage这个接口的封装,说白就是要把图片转化成QRCodeImage,它这个jar包才能对其成功解码,所以要对这个接口进行封装,不可以强制类型转换。

    class J2SEImage implements QRCodeImage {
    	BufferedImage bufImg;
    
    	public J2SEImage(BufferedImage bufImg) {
    		this.bufImg = bufImg;
    	}
    
    	public int getWidth() {
    		return bufImg.getWidth();
    	}
    
    	public int getHeight() {
    		return bufImg.getHeight();
    	}
    
    	public int getPixel(int x, int y) {
    		return bufImg.getRGB(x, y);
    	}
    }
    这接口封装起来很简单嘛!就是要取走图片、长宽,各个像素的颜色。

    6、把QRCodeImage这个接口的封装成J2SEImage之后,写一个decodeQRCode这个类,代码如下:

    <span style="white-space:pre">	</span>public static String decodeQRCode(String imgPath) throws IOException {
    		/*
    		 * @imageFile 被解码的文件
    		 * @BufferedImage 此乃所谓的图片缓冲流
    		 * @decodedData 存放解码的内容
    		 */
    		File imageFile = new File(imgPath);
    		BufferedImage bufImg = null;
    		String decodedData = null;
    		bufImg = ImageIO.read(imageFile);
    		QRCodeDecoder decoder = new QRCodeDecoder();
    		//封装后直接用decode方法就能完成二维码的解码
    		decodedData = new String(decoder.decode(new J2SEImage(bufImg)));
    		System.out.println("解析成功!");
    		//最后返回解码的内容就OK
    		return decodedData;
    	}


    做完在于主函数中加入一条System.out.println(decodeQRCode(imgPath));,就能够在控制台输出解码的内容,运行一下,可以在工程目录下生成了一个http://www.a.com网址被编码成的二维码图片test.png,这个test.png就不传上来,现在的人就是TMD剑,没事拿手机对二维码乱扫,好奇心杀死猫,我放个扣费网址你就呵呵了,同时控制台输出:




    展开全文
  • 本文主要介绍Java实现二维码QRCode的编码解码,这里给大家一个小示例以便理解,有需要的小伙伴可以参考下
  • 【3】使用Zint工具生成二维码,注意选择类型,并输入要生成文本,此处我输入是Hello World,Everyone! 【4】保存Q-R二维码图像 这样我们Q-R二维码图像就保存成功了【保存为hello.png】。 ...

    1.Zint生成二维码

    http://sourceforge.net/projects/zint/

    【1】从上述站点下载Zint工具

    【2】安装Zint工具

    【3】使用Zint工具生成二维码,注意选择类型,并输入要生成的文本,此处我输入的是Hello World,Everyone!

    image

    【4】保存Q-R二维码图像

    这样我们的Q-R二维码图像就保存成功了【保存为hello.png】。

     

    2.使用Zxing进行解码

    Zxing是大名鼎鼎的条码处理开源项目,提供了多个平台上各种标准条形码的生成与解码工具。

    https://github.com/zxing

    Zxing提供了Android,Java,IPhone,Objective-C,C++,Jruby,Qt, .NET等各个平台库,其内容十分庞大,这里就不主要介绍了。下面,我们利用Zxing提供的JRuby项目进行简单的解码操作,把刚才生成的二维码图片作为输入,看看能否得到预期的输出。

    【1】安装JRuby

    由于Zxing原生于Java,因此它提供的库是JRuby版本的,于是先安装JRuby。(之所以选用JRuby是因为它比较轻量级,简单好用)

    http://jruby.org/ 安装JRuby非常简单,只需3步:

    (1)下载Jruby zip包

    (2)解压JRuby

    (3)将Jruby下bin目录所在路径加入PATH环境变量

    (4)完成(在cmd中输入jruby -v测试是否安装成功)

    image

    【2】安装Zxing for ruby

    https://github.com/ecin/zxing.rb

    打开cmd,输入jruby -S gem install zxing等待数秒,jruby会为我们装好zxing。此时,我们就可以在ruby代码中import zxing了!

    【3】编写解码程序

    解码程序非常简单,在刚才保存图片的文件夹下新建一个ruby文件【1.ruby】,程序代码只需3行:

    1 require 'zxing'
    2 
    3 result = ZXing.decode 'hello.png'
    4 
    5 puts result

     简单的说,就是调用Zxing中的decode方法,输入参数为同目录下的“hello.png"文件,并将输入保存在result中。

    【4】执行解码程序

    打开cmd,执行jruby 1.rb,其输出结果果然和我们输入时相同。

    image

     

    3.基于.NET的简单编解码工具

    【1】下载Zxing.NET工具

    http://zxingnet.codeplex.com/releases/view/117068

    下载后,将其解压到任意位置,我们之后会用到其中的dll文件。

    【2】在VS2013中建立winForm应用程序

    image

    【3】添加引用

    添加引用时,请注意对应版本!!!选择对应版本的zxing.dll,将其加入到引用当中。

    image

    image

    【4】设计GUI界面

    这里就展示一下,详细请下载工程代码(附件)

    (1)输入文本,点击Generate,生成QR-Code

    (2)点击Save,选择路径,保存QR-Code

    (3)点击Decoding,选择相应的QR-Code文件,解码QR-Code,并将文本显示在Result中!

    image

    【5】编码

    核心代码1:生成QR-Code

    image

    核心代码2:解码QR-Code

    image

    【6】功能展示

    (1)生成QR-Code

    输入Hello World!点击Generate!

    image

    (2)保存QR-Code

    imageimage

    (3)解码QR-Code

    这次我们选择最开始我们利用Zint生成的hello.png,看看能否获得同样的结果。

    image

    我们看到,结果与JRuby输出的结果相同。

    【7】最后项目源码分享,欢迎进一步探讨,Thank you for your support!

    Click me to get code.

     

    转载于:https://www.cnblogs.com/Kassadin/p/4534952.html

    展开全文
  • QRcode是日本人94年开发...qrcode需要设置一个版本号,这个版本号代表你生成的二维码的像素的大小。版本1是21*21的,版本号每增加1,边长增加4。也就是说版本7的大小是45 * 45的。版本号最大值是40。另外,版本7的编...
  • 众所周知,爪哇,是一种神奇的编程语言,用JAVA...本节主要讲JAVA实现二维码的编码与解码。 废话也就那么多了,转入正题。 需要的JAR包如下。 编码lib:Qrcode_swetake.jar (官网介绍-- http://www.sweta
  • 在代码编制上巧妙地利用构成计算机内部逻辑基础地“0”、“1”比特流地概念,使用若干个二进制相对应地几何图形来表示文字数值信息,通过图像输入设备或光电扫描设备自动识读以实现信息自动处理。二维码能够在横向...
  • 一、简介 Aztec Code是1995年,由Hand ...当使用最高容量和25%纠错级别時候,Aztec可以对3000个字符或者3750个数字进行编码。 Aztec矩阵大小在15 X 15和151 X 151之间变化。每个最小单位非黑即白。...
  • 利用二维码的编码解码原理,通过Android手机对二维码的数据进行解析和编码,实现对二维码生成和识别系统。该系 统内容包括两部分:二维条码的生成系统设计和二维条码的识别系统设计。生成系统完成了从输入数据到...
  • Java实现二维码生成识别

    万次阅读 2014-03-24 01:17:52
    java实现QRCODE二维码的编码与解码实例 众所周知,爪哇,是一种神奇的编程语言,用JAVA实现某一个功能,只是随便上网找一些对应的实现JAR包即可,于是,有了像JAR114这样专门提供给爪哇程序猿的下载的那么一堆...
  • 一、简介 Data Matrix 二维条码原名Datacode,由...Data Matrix符号由规则排列深浅色正方形模块构成,每个正方形模块就是一个基本单元,每个基本单元又被编码为一比特数据。数据区四周是探测图形,用于条码符...
  • 采用TI高速DSP芯片TMS320DM642作为图像处理器,使用高分辨率CCD摄像头捕捉图像,在DSP处理器中利用模式识别初次定位,并对Data Matrix二维码进行精确解码识别,得到编码二维码图形中字符串信息。其结果可以...
  • 本篇文章中,旨在解决如何用Matlab编程实现QR二维码的生成识别。编程环境是Matlab2012a,所用的开源库是ZXing,ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、UPC的1D...
  • java实现二维码的生成和解读 ... Java利用QRCode.jar包实现二维码编码与解码 QRcode是日本人94年开发出来的。首先去QRCode的官网http://swetake.com/qrcode/java/qr_java.html,把要用的ja...
  • zxing是一个开放源码的,用java实现的多种格式的1D/2D条码...可以实现条形码和二维码的编码与解码。 github官网源码地址:https://github.com/zxing/zxing 开源库api文档:https://zxing.github.io/zxing/apidoc
  • zxing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的接口;可以实现使用手机的内置的摄像头完成条形码和二维码的扫描与解码;也可以实现条形码和二维码的编码与解码
  • com.google.zxing 实现二维码生成解析   二维码处理分为两部分:  编码:使用字符串生成图片;  解码:解析图片中字符串;  二维码图片存在形式非常多,文件、纸张、手机、电脑屏幕。图片在不同...
  • Zxing实现在线二维码生成程序

    千次阅读 2015-07-25 17:51:13
    关于zxing使用请参考笔者另外一篇博文:Java二维码生成与解码工具Zxing使用首先我们来看看效果: 在文本框中输入内容后点击生成二维码按钮,应用自动对文本框中内容进行编码,生成二维码图片显示在下方。要...
  • 二维码QRCode开源实现

    2011-08-17 10:44:08
    日本人写的解码与编码实现Sourceforge.jpswetake.com 这里把它们merge到一个jar文件里。(见附件中压缩包zip文件)   编码测试:     import java.awt.Color; import java...
  • 二维码现在用超级多,其实它就是一种编码,把字符串编码保存成一个图片,我们扫描图片得到字符串就解码成功。 最有名的二维码解析库是 google 出品 Zxing,网上也有很多封装库,有自定义扫描窗口等,更多库请...
  • zxing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的接口。可以实现使用手机的内置的摄像头完成条形码和...可以实现条形码和二维码的编码与解码。 github官网源码地址...

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

二维码的编码与解码实现