Android_demo之生成二维码

今天我们来学习一个自动生成二维码 的写法。我们经常能见到各种二维码,比如公众号的二维码,网址的,加好友的,支付的二维码等等。其实每一个二维码只是利用图片的形式展示出来的,实际是一些字符串。而这个字符串可以通过我们识别二维码的工具下显示出来。所谓生成二维码说白了就是将字符串用图片形式展现出来。。真正厉害的是识别的工具。当然,我目前只会生成这样的二维码图片,让我们一起来学习一下吧。

首先我们得先写个布局。

activity_main.xml

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context="com.example.testzxing.MainActivity" >
10
11     <EditText
12         android:id="@+id/editText1"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:layout_alignParentLeft="true"
16         android:layout_alignParentTop="true"
17         android:layout_marginLeft="38dp"
18         android:layout_marginTop="33dp"
19         android:ems="10" >
20
21         <requestFocus />
22     </EditText>
23
24     <Button
25         android:id="@+id/button1"
26         android:layout_width="wrap_content"
27         android:layout_height="wrap_content"
28         android:layout_alignRight="@+id/editText1"
29         android:layout_below="@+id/editText1"
30         android:layout_marginRight="20dp"
31         android:layout_marginTop="22dp"
32         android:text="Button" />
33
34     <ImageView
35         android:id="@+id/imageView1"
36         android:layout_width="wrap_content"
37         android:layout_height="wrap_content"
38         android:layout_alignLeft="@+id/editText1"
39         android:layout_below="@+id/button1"
40         android:layout_marginLeft="14dp"
41         android:layout_marginTop="47dp" />
42
43 </RelativeLayout>

然后在 MainActivity.class中写功能代码。注释中写得很清楚。

package com.example.testzxing;

import java.util.Hashtable;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private EditText et1;
    private Button btn1;
    private ImageView iv1;

    private static final int IMAGE_HALFWIDTH = 45;//图片宽度值大小

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et1 = (EditText)findViewById(R.id.editText1);
        btn1 = (Button)findViewById(R.id.button1);
        iv1 = (ImageView)findViewById(R.id.imageView1);
        btn1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                //取出字符串
                String toMakePic_string = et1.getText().toString().trim();
                //二维码中间的图片
                Bitmap logo= BitmapFactory.decodeResource(getResources(),R.drawable.center);
                try {
                    Bitmap bm=createCode(toMakePic_string,logo,BarcodeFormat.QR_CODE);
                    iv1.setImageBitmap(bm);
                } catch (WriterException e) {
                    e.printStackTrace();
                }

            }
        });

    }

    public Bitmap createCode(String string,Bitmap mBitmap, BarcodeFormat format)throws WriterException {
        //Matrix,中文里叫矩阵,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。
        Matrix m = new Matrix();
        float sx = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getWidth();
        float sy = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getHeight();
        m.setScale(sx, sy);//设置缩放信息
        //将logo图片按martix设置的信息缩放
        mBitmap = Bitmap.createBitmap(mBitmap, 0, 0,mBitmap.getWidth(), mBitmap.getHeight(), m, false);
        MultiFormatWriter writer = new MultiFormatWriter();
        Hashtable hst = new Hashtable();
        hst.put(EncodeHintType.CHARACTER_SET, "UTF-8");//设置字符编码
        //生成二维码矩阵信息
        BitMatrix matrix = writer.encode(string, format, 800, 800, hst);
        int width = matrix.getWidth();//矩阵高度
        int height = matrix.getHeight();//矩阵宽度
        int halfW = width / 2;
        int halfH = height / 2;
        int[] pixels = new int[width * height];//定义数组长度为矩阵高度*矩阵宽度,用于记录矩阵中像素信息
        for (int y = 0; y < height; y++) {//从行开始迭代矩阵
            for (int x = 0; x < width; x++) {//迭代列
                if (x > halfW - IMAGE_HALFWIDTH && x < halfW + IMAGE_HALFWIDTH && y > halfH - IMAGE_HALFWIDTH && y < halfH + IMAGE_HALFWIDTH) {
                    //该位置用于存放图片信息
                    //记录图片每个像素信息
                    pixels[y * width + x] = mBitmap.getPixel(x - halfW+ IMAGE_HALFWIDTH, y - halfH + IMAGE_HALFWIDTH);
                }
                else {
                    if (matrix.get(x, y)) {
                        //如果有黑块点,记录信息
                        pixels[y * width + x] = 0xff000000;//记录黑块信息
                    }
                }
            }
        }
        Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);
        // 通过像素数组生成bitmap
        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
        return bitmap;
    }

}

这样我们运行后就会这样。

用能识别二维码的工具就可以扫码识别了。

当然如果单纯这样是不行。因为这里要用一个很重要的jar 包,没有就引用不了。生成不了代码。

一定要加上这个 jar 包哦。

今天大概就这些内容,很简单是不是,上面很多代码都是牛人写好的套路,所以我们引用便是,有能力了可以考虑写自己的一套生成二维码 的代码。

最后多说一句,不要用二维码干坏事哟。我们是有水平的程序猿!!!

时间: 2024-11-01 00:26:21

Android_demo之生成二维码的相关文章

微信生成二维码 只需一个网址即刻 还有jquery生成二维码

<div class="orderDetails-info"> <img src="http://qr.topscan.com/api.php?text=http://123.net/index.php?s=/Home/Index/yanzheng/mai/{$dange.id}" style="width: 5rem; margin-bottom: 1rem;" > </div> http://qr.tops

通过jquery-qrcode在线生成二维码

随着移动互联网的发展,二维码现在应用得越来越广泛了,随手扫扫就可以浏览网站.加个好友什么的,比起手工输入真的是方便太多了. 前期做了一个综合测评系统,考虑逐步实现移动化,一长串的IP地址用户输入也不方便,借助二维码的话,用户拿起手机扫扫就可以直接进入系统. 基于这个应用场景,就上网研究下了网站二维码的实现方式,归纳起来有以下两种: 1.借助一些二维码生成网站或者二维码生成器生成二维码图片,然后挂在网站上,如码云 QR-Code (二维码) 在线生成器 优点:开发成本为零,能够快速实现多样化的二维

C# winform通过ThoughtWorks.QRCode生成二维码解码可以添加logo

首先要下载ThoughtWorks.QRCode.dll文件,添加引用. ThoughtWorks.QRCode.dll下载,点击下载 界面如下: 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Win

Android:使用ZXing生成二维码(支持加入Logo图案)

ZXing是谷歌的一个开源库.能够用来生成二维码.扫描二维码.本文所介绍的是第一部分. 首先上效果图: ZXing相关各种文件官方下载地址:https://github.com/zxing/zxing/releases 或者在这里下载(仅仅有本项目所用的jar包,版本:3.2.0):链接: http://pan.baidu.com/s/1hq3s5EW password: mvg7 1.生成二维码的工具类 /** * 二维码生成工具类 */ public class QRCodeUtil { /

jquery生成二维码并实现图片下载

1.引入jquery的两个js文件 <script src="../scripts/erweima/jquery-1.10.2.min.js"></script> <script type="text/javascript" src="../scripts/erweima/jquery.qrcode.min.js"></script> 2.准备一个展示二维码的div <div id="

生成二维码

PHPqrCode是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo, 查看地址:http://phpqrcode.sourceforge.net/.    下载官网提供的类库后,只需要使用phpqrcode.php就可以生成二维码了,当然您的PHP环境必须开启支持GD2. phpqrcode.php提供了一个关键的png()方法,其中参数$text表示生成二位的的信息文本:参数$outfile表示是否输出二维码图片 文件,默认否:参数$level表示容错率,

Python生成二维码和短网址

使用PyQt5. 方便电脑传输网址或者文字内容到手机上面,扫一下二维码就行了,短网址偶尔也能用上. 1 #!/usr/bin/env python3 2 from PyQt5.QtGui import QPixmap 3 from PyQt5 import QtWidgets 4 from PyQt5.QtCore import Qt 5 import requests 6 from os.path import expanduser 7 8 9 class Ui_qrDlg(): 10 11

【VB.NET】利用 ZXing.Net 生成二维码(支持自定义LOGO)

ZXing .NET 的项目主页https://zxingnet.codeplex.com/ 代码基本上抄袭自下面两篇文章 XDhttp://www.cnblogs.com/tianma3798/p/5426869.htmlhttp://www.cnblogs.com/tianma3798/p/5426880.html 仅作参数优化,更加实用和简便一点 Shared Function MakeQR(ByVal qrtext As String, Optional ByVal width As I

java生成二维码

具体代码如下,作为一个新手,期待与你一起交流: 1 import java.awt.Color; 2 import java.awt.Graphics2D; 3 import java.awt.image.BufferedImage; 4 import java.io.File; 5 6 import javax.imageio.ImageIO; 7 8 import com.swetake.util.Qrcode; 9 public class QRCodeEncoderHandler { 1