二维码 订阅
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。 [1]  2016年8月3日,支付清算协会向支付机构下发《条码支付业务规范》(征求意见稿),意见稿中明确指出支付机构开展条码业务需要遵循的安全标准。这是央行在2014年叫停二维码支付以后首次官方承认二维码支付地位。 [2] 展开全文
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。 [1]  2016年8月3日,支付清算协会向支付机构下发《条码支付业务规范》(征求意见稿),意见稿中明确指出支付机构开展条码业务需要遵循的安全标准。这是央行在2014年叫停二维码支付以后首次官方承认二维码支付地位。 [2]
信息
主要特点
信息量大、易识别、成本低等
外文名
Quick Response Code
别    称
二维条码
拼    音
èr wéi mǎ
作    用
记载信息
中文名
二维码
常见类型
堆叠式二维码、矩阵式二维码
常见营销方式
扫码支付、营销、电商平台
应用范围
商业活动、网络链接、信息读取
二维码发展历程
国外对二维码技术的研究始于20世纪80年代末,在二维码符号表示技术研究方面已研制出多种码制,常见的有PDF417、QR Code、Code 49、Code 16K、Code One等。这些二维码的信息密度都比传统的一维码有了较大提高,如PDF417的信息密度是一维码CodeC39的20多倍。在二维码标准化研究方面,国际自动识别制造商协会(AIM)、美国标准化协会(ANSI)已完成了PDF417、QR Code、Code 49、Code 16K、Code One等码制的符号标准。国际标准技术委员会和国际电工委员会还成立了条码自动识别技术委员会(ISO/IEC/JTC1/SC31),已制定了QR Code的国际标准(ISO/IEC 18004:2000《自动识别与数据采集技术—条码符号技术规范—QR码》),起草了PDF417、Code 16K、Data Matrix、Maxi Code等二维码的ISO/IEC标准草案。在二维码设备开发研制、生产方面,美国、日本等国的设备制造商生产的识读设备、符号生成设备,已广泛应用于各类二维码应用系统。二维码作为一种全新的信息存储、传递和识别技术,自诞生之日起就得到了世界上许多国家的关注。美国、德国、日本等国家,不仅已将二维码技术应用于公安、外交、军事等部门对各类证件的管理,而且也将二维码应用于海关、税务等部门对各类报表和票据的管理,商业、交通运输等部门对商品及货物运输的管理、邮政部门对邮政包裹的管理、工业生产领域对工业生产线的自动化管理。中国对二维码技术的研究开始于1993年。中国物品编码中心对几种常用的二维码PDF417、QRCCode、Data Matrix、Maxi Code、Code 49、Code 16K、Code One的技术规范进行了翻译和跟踪研究。随着中国市场经济的不断完善和信息技术的迅速发展,国内对二维码这一新技术的需求与日俱增。中国物品编码中心在原国家质量技术监督局和国家有关部门的大力支持下,对二维码技术的研究不断深入。在消化国外相关技术资料的基础上,制定了两个二维码的国家标准:二维码网格矩阵码(SJ/T 11349-2006)和二维码紧密矩阵码(SJ/T 11350-2006),从而大大促进了中国具有自主知识产权技术的二维码的研发。2016年8月3日,支付清算协会向支付机构下发《条码支付业务规范》(征求意见稿),意见稿中明确指出支付机构开展条码业务需要遵循的安全标准。这是央行在2014年叫停二维码支付以后首次官方承认二维码支付地位。 [3] 
收起全文
精华内容
参与话题
问答
  • 了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一张图片中扫一下竟然能直接加好友,不可思议啊,那时候还不了解二维码,呵呵,然后做项目的时候,老板说要加上二维码扫描功能,...
  • 二维码

    2015-12-02 17:09:36
    二维码历史性的东西 使用zxing包,qrcode 二维码的精简 以前很长一段时间.关于zxing包的精简是比较火. 二维码横竖屏切换 图片横着切 二维码动画 仿微信扫描效果 使用zxing扫描二维码认识二维码 二维码的范围 ...

    二维码历史性的东西

    使用zxing包,qrcode

    二维码的精简

    以前很长一段时间.关于zxing包的精简是比较火.

    二维码横竖屏切换

    图片横着切

    二维码动画

    仿微信扫描效果

    使用zxing扫描二维码

    认识二维码

    • 二维码的范围
    • 二维码容错级别
    • 二维码嵌入logo

    使用

    //1.启动扫描界面
                Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
                startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
    // 2.处理扫描结果
    /**
     * 
     * @param result
     * @param barcode
     */
    public void handleDecode(Result result, Bitmap barcode) {
        inactivityTimer.onActivity();
        playBeepSoundAndVibrate();
    
        // 扫描结果
        String resultString = result.getText();
    
        if (resultString.equals("")) {
            Toast.makeText(CaptureActivity.this, "Scan failed!", Toast.LENGTH_SHORT).show();
        } else {
            //2.传递扫描结果
            Intent resultIntent = new Intent();
            Bundle bundle = new Bundle();
            bundle.putString("result", resultString);
            bundle.putParcelable("bitmap", barcode);
            resultIntent.putExtras(bundle);
            this.setResult(RESULT_OK, resultIntent);
        }
        CaptureActivity.this.finish();
    }
    
    //3.收到回传的 结果
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case SCANNIN_GREQUEST_CODE:
            if (resultCode == RESULT_OK) {
                Bundle bundle = data.getExtras();
                //显示扫描到的内容
                tv_result.setText(bundle.getString("result"));
                //显示
                iv_qrcode.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));
            }
            break;
        }
    }
    

    友盟

    • key:5566d5da67e58e96b9002140
    展开全文
  • 了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一张图片中扫一下竟然能直接加好友,不可思议啊,那时候还不了解二维码,呵呵,然后做项目的时候,老板说要加上二维码扫描功能,...

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10163203

    了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一张图片中扫一下竟然能直接加好友,不可思议啊,那时候还不了解二维码,呵呵,然后做项目的时候,老板说要加上二维码扫描功能,然后自己的屁颠屁颠的去百度,google啥的,发现很多朋友都有介绍二维码扫描的功能,然后我就跟着人家的介绍自己搞起了二维码扫描功能,跟着人家的帖子,很快我的项目就加入了扫描二维码的功能,然后自己还很开心。


    随着微信的到来,二维码越来越火爆,随处能看到二维码,比如商城里面,肯德基,餐厅等等,对于二维码扫描我们使用的是google的开源框架Zxing,我们可以去http://code.google.com/p/zxing/下载源码和Jar包,之前我项目中的二维码扫描功能只实现了扫描功能,其UI真的是其丑无比,一个好的应用软件,其UI界面也要被大众所接纳,不然人家就不会用你的软件啦,所以说应用软件功能和界面一样都很重要,例如微信,相信微信UI被很多应用软件所模仿,我也仿照微信扫描二维码效果进行模仿,虽然没有微信做的那么精致,但是效果还是可以的,所以将自己修改UI的代码和扫描二维码的代码分享给大家,一是自己以后项目遇到同样的功能直接拷贝来用,二是给还没有加入二维码功能的人一个参考,站在巨人的肩膀上,哈哈,我之前也是站在巨人的肩膀上加上此功能,接下来跟着我一步一步来实现此项功能,里面去除了很多不必要的文件


    我们先看下项目的结构


    • 如果你项目也想加入此功能,你直接将com.mining.app.zxing.camera,com.mining.app.zxing.decoding,com.mining.app.zxing.view这三个包拷贝到你的项目中,然后引入相对应的资源进去,我也是从我的项目中直接引用过来的,包名都没改呢,当然还需要引用Zxing.jar

    • com.example.qr_codescan包里面有一个MipcaActivityCapture,也是直接引入我之前项目的代码的,这个Activity主要处理扫描界面的类,比如,扫描成功有声音和振动等等,主要关注里面的handleDecode(Result result, Bitmap barcode)方法,扫描完成之后将扫描到的结果和二维码的bitmap当初参数传递到handleDecode(Result result, Bitmap barcode)里面,我们只需要在里面写出相对应的处理代码即可,其他的地方都不用改得,我这里处理扫描结果和扫描拍的照片

    	/**
    	 * 处理扫描结果
    	 * @param result
    	 * @param barcode
    	 */
    	public void handleDecode(Result result, Bitmap barcode) {
    		inactivityTimer.onActivity();
    		playBeepSoundAndVibrate();
    		String resultString = result.getText();
    		if (resultString.equals("")) {
    			Toast.makeText(MipcaActivityCapture.this, "Scan failed!", Toast.LENGTH_SHORT).show();
    		}else {
    			Intent resultIntent = new Intent();
    			Bundle bundle = new Bundle();
    			bundle.putString("result", resultString);
    			bundle.putParcelable("bitmap", barcode);
    			resultIntent.putExtras(bundle);
    			this.setResult(RESULT_OK, resultIntent);
    		}
    		MipcaActivityCapture.this.finish();
    	}

    • 我对MipcaActivityCapture界面的布局做了自己的改动,先看下效果图,主要是用到FrameLayout,里面嵌套RelativeLayout,里面的图片也是从微信里面拿出来的,平常我看到需要什么图片就去微信里面找,没有美工的公司的程序员就是苦逼


    布局代码如下

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
    
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
    
            <SurfaceView
                android:id="@+id/preview_view"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_gravity="center" />
    
            <com.mining.app.zxing.view.ViewfinderView
                android:id="@+id/viewfinder_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
    
            <include
                android:id="@+id/include1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                layout="@layout/activity_title" />
        </RelativeLayout>
    
    </FrameLayout>
    在里面我将界面上面部分写在另一个布局里面,然后include进来,因为这个activity_title在我项目里面还供其他的Activity使用,我也是直接拷贝出来的

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/mmtitle_bg_alpha" >
    
        <Button
            android:id="@+id/button_back"
            android:layout_width="75.0dip"
            android:text="返回"
            android:background="@drawable/mm_title_back_btn"
            android:textColor="@android:color/white"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="2dip" />
    
        <TextView
            android:id="@+id/textview_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/button_back"
            android:layout_alignBottom="@+id/button_back"
            android:layout_centerHorizontal="true"
            android:gravity="center_vertical"
            android:text="二维码扫描"
            android:textColor="@android:color/white"
            android:textSize="18sp" />
    
    </RelativeLayout>
    • 在我这个demo里面,有一个主界面MainActivity,里面一个Button, 一个ImageView和一个TextView,点击Button进入到二维码扫描界面,当扫描OK的时候,回到主界面,将扫描的结果显示到TextView,将图片显示到ImageView里面,然后你可以不处理图片,我这里随带的加上图片,主界面的布局很简单如下

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffe1e0de" >
    
        <Button
            android:id="@+id/button1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:text="扫描二维码" />
    
        <TextView
            android:id="@+id/result"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/button1"
            android:lines="2"
            android:gravity="center_horizontal"
            android:textColor="@android:color/black"
            android:textSize="16sp" />
    
        <ImageView
            android:id="@+id/qrcode_bitmap"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/result"/>
    </RelativeLayout>
    • MainActivity里面的代码如下,里面的功能在上面已经说了

    package com.example.qr_codescan;
    
    
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    	private final static int SCANNIN_GREQUEST_CODE = 1;
    	/**
    	 * 显示扫描结果
    	 */
    	private TextView mTextView ;
    	/**
    	 * 显示扫描拍的图片
    	 */
    	private ImageView mImageView;
    	
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		mTextView = (TextView) findViewById(R.id.result); 
    		mImageView = (ImageView) findViewById(R.id.qrcode_bitmap);
    		
    		//点击按钮跳转到二维码扫描界面,这里用的是startActivityForResult跳转
    		//扫描完了之后调到该界面
    		Button mButton = (Button) findViewById(R.id.button1);
    		mButton.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				Intent intent = new Intent();
    				intent.setClass(MainActivity.this, MipcaActivityCapture.class);
    				intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    				startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
    			}
    		});
    	}
    	
    	
    	@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            switch (requestCode) {
    		case SCANNIN_GREQUEST_CODE:
    			if(resultCode == RESULT_OK){
    				Bundle bundle = data.getExtras();
    				//显示扫描到的内容
    				mTextView.setText(bundle.getString("result"));
    				//显示
    				mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));
    			}
    			break;
    		}
        }	
    
    }
    


    • 上面的代码还是比较简单,但是要想做出像微信那样只的扫描框,紧紧上面的代码是没有那种效果的,我们必须重写com.mining.app.zxing.view包下面的ViewfinderView类,微信里面的都是用的图片,我是自己画出来的,代码注释的比较清楚,大家直接看代码吧,相信你能理解的,如果你要修改扫描框的大小,去CameraManager类里面修改

    /*
     * Copyright (C) 2008 ZXing authors
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    package com.mining.app.zxing.view;
    
    import java.util.Collection;
    import java.util.HashSet;
    
    import android.content.Context;
    import android.content.res.Resources;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Rect;
    import android.graphics.Typeface;
    import android.util.AttributeSet;
    import android.view.View;
    
    import com.example.qr_codescan.R;
    import com.google.zxing.ResultPoint;
    import com.mining.app.zxing.camera.CameraManager;
    
    /**
     * This view is overlaid on top of the camera preview. It adds the viewfinder
     * rectangle and partial transparency outside it, as well as the laser scanner
     * animation and result points.
     * 
     */
    public final class ViewfinderView extends View {
    	private static final String TAG = "log";
    	/**
    	 * 刷新界面的时间
    	 */
    	private static final long ANIMATION_DELAY = 10L;
    	private static final int OPAQUE = 0xFF;
    
    	/**
    	 * 四个绿色边角对应的长度
    	 */
    	private int ScreenRate;
    	
    	/**
    	 * 四个绿色边角对应的宽度
    	 */
    	private static final int CORNER_WIDTH = 10;
    	/**
    	 * 扫描框中的中间线的宽度
    	 */
    	private static final int MIDDLE_LINE_WIDTH = 6;
    	
    	/**
    	 * 扫描框中的中间线的与扫描框左右的间隙
    	 */
    	private static final int MIDDLE_LINE_PADDING = 5;
    	
    	/**
    	 * 中间那条线每次刷新移动的距离
    	 */
    	private static final int SPEEN_DISTANCE = 5;
    	
    	/**
    	 * 手机的屏幕密度
    	 */
    	private static float density;
    	/**
    	 * 字体大小
    	 */
    	private static final int TEXT_SIZE = 16;
    	/**
    	 * 字体距离扫描框下面的距离
    	 */
    	private static final int TEXT_PADDING_TOP = 30;
    	
    	/**
    	 * 画笔对象的引用
    	 */
    	private Paint paint;
    	
    	/**
    	 * 中间滑动线的最顶端位置
    	 */
    	private int slideTop;
    	
    	/**
    	 * 中间滑动线的最底端位置
    	 */
    	private int slideBottom;
    	
    	private Bitmap resultBitmap;
    	private final int maskColor;
    	private final int resultColor;
    	
    	private final int resultPointColor;
    	private Collection<ResultPoint> possibleResultPoints;
    	private Collection<ResultPoint> lastPossibleResultPoints;
    
    	boolean isFirst;
    	
    	public ViewfinderView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		
    		density = context.getResources().getDisplayMetrics().density;
    		//将像素转换成dp
    		ScreenRate = (int)(20 * density);
    
    		paint = new Paint();
    		Resources resources = getResources();
    		maskColor = resources.getColor(R.color.viewfinder_mask);
    		resultColor = resources.getColor(R.color.result_view);
    
    		resultPointColor = resources.getColor(R.color.possible_result_points);
    		possibleResultPoints = new HashSet<ResultPoint>(5);
    	}
    
    	@Override
    	public void onDraw(Canvas canvas) {
    		//中间的扫描框,你要修改扫描框的大小,去CameraManager里面修改
    		Rect frame = CameraManager.get().getFramingRect();
    		if (frame == null) {
    			return;
    		}
    		
    		//初始化中间线滑动的最上边和最下边
    		if(!isFirst){
    			isFirst = true;
    			slideTop = frame.top;
    			slideBottom = frame.bottom;
    		}
    		
    		//获取屏幕的宽和高
    		int width = canvas.getWidth();
    		int height = canvas.getHeight();
    
    		paint.setColor(resultBitmap != null ? resultColor : maskColor);
    		
    		//画出扫描框外面的阴影部分,共四个部分,扫描框的上面到屏幕上面,扫描框的下面到屏幕下面
    		//扫描框的左边面到屏幕左边,扫描框的右边到屏幕右边
    		canvas.drawRect(0, 0, width, frame.top, paint);
    		canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint);
    		canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1,
    				paint);
    		canvas.drawRect(0, frame.bottom + 1, width, height, paint);
    		
    		
    
    		if (resultBitmap != null) {
    			// Draw the opaque result bitmap over the scanning rectangle
    			paint.setAlpha(OPAQUE);
    			canvas.drawBitmap(resultBitmap, frame.left, frame.top, paint);
    		} else {
    
    			//画扫描框边上的角,总共8个部分
    			paint.setColor(Color.GREEN);
    			canvas.drawRect(frame.left, frame.top, frame.left + ScreenRate,
    					frame.top + CORNER_WIDTH, paint);
    			canvas.drawRect(frame.left, frame.top, frame.left + CORNER_WIDTH, frame.top
    					+ ScreenRate, paint);
    			canvas.drawRect(frame.right - ScreenRate, frame.top, frame.right,
    					frame.top + CORNER_WIDTH, paint);
    			canvas.drawRect(frame.right - CORNER_WIDTH, frame.top, frame.right, frame.top
    					+ ScreenRate, paint);
    			canvas.drawRect(frame.left, frame.bottom - CORNER_WIDTH, frame.left
    					+ ScreenRate, frame.bottom, paint);
    			canvas.drawRect(frame.left, frame.bottom - ScreenRate,
    					frame.left + CORNER_WIDTH, frame.bottom, paint);
    			canvas.drawRect(frame.right - ScreenRate, frame.bottom - CORNER_WIDTH,
    					frame.right, frame.bottom, paint);
    			canvas.drawRect(frame.right - CORNER_WIDTH, frame.bottom - ScreenRate,
    					frame.right, frame.bottom, paint);
    
    			
    			//绘制中间的线,每次刷新界面,中间的线往下移动SPEEN_DISTANCE
    			slideTop += SPEEN_DISTANCE;
    			if(slideTop >= frame.bottom){
    				slideTop = frame.top;
    			}
    			canvas.drawRect(frame.left + MIDDLE_LINE_PADDING, slideTop - MIDDLE_LINE_WIDTH/2, frame.right - MIDDLE_LINE_PADDING,slideTop + MIDDLE_LINE_WIDTH/2, paint);
    			
    			
    			//画扫描框下面的字
    			paint.setColor(Color.WHITE);
    			paint.setTextSize(TEXT_SIZE * density);
    			paint.setAlpha(0x40);
    			paint.setTypeface(Typeface.create("System", Typeface.BOLD));
    			canvas.drawText(getResources().getString(R.string.scan_text), frame.left, (float) (frame.bottom + (float)TEXT_PADDING_TOP *density), paint);
    			
    			
    
    			Collection<ResultPoint> currentPossible = possibleResultPoints;
    			Collection<ResultPoint> currentLast = lastPossibleResultPoints;
    			if (currentPossible.isEmpty()) {
    				lastPossibleResultPoints = null;
    			} else {
    				possibleResultPoints = new HashSet<ResultPoint>(5);
    				lastPossibleResultPoints = currentPossible;
    				paint.setAlpha(OPAQUE);
    				paint.setColor(resultPointColor);
    				for (ResultPoint point : currentPossible) {
    					canvas.drawCircle(frame.left + point.getX(), frame.top
    							+ point.getY(), 6.0f, paint);
    				}
    			}
    			if (currentLast != null) {
    				paint.setAlpha(OPAQUE / 2);
    				paint.setColor(resultPointColor);
    				for (ResultPoint point : currentLast) {
    					canvas.drawCircle(frame.left + point.getX(), frame.top
    							+ point.getY(), 3.0f, paint);
    				}
    			}
    
    			
    			//只刷新扫描框的内容,其他地方不刷新
    			postInvalidateDelayed(ANIMATION_DELAY, frame.left, frame.top,
    					frame.right, frame.bottom);
    			
    		}
    	}
    
    	public void drawViewfinder() {
    		resultBitmap = null;
    		invalidate();
    	}
    
    	/**
    	 * Draw a bitmap with the result points highlighted instead of the live
    	 * scanning display.
    	 * 
    	 * @param barcode
    	 *            An image of the decoded barcode.
    	 */
    	public void drawResultBitmap(Bitmap barcode) {
    		resultBitmap = barcode;
    		invalidate();
    	}
    
    	public void addPossibleResultPoint(ResultPoint point) {
    		possibleResultPoints.add(point);
    	}
    
    }
    

    上面的代码中,中间那根线微信是用的图片,我这里是画的,如果你想更加仿真点就将下面的代码

    canvas.drawRect(frame.left + MIDDLE_LINE_PADDING, slideTop - MIDDLE_LINE_WIDTH/2, frame.right - MIDDLE_LINE_PADDING,slideTop + MIDDLE_LINE_WIDTH/2, paint);

    改成

    Rect lineRect = new Rect();
    			lineRect.left = frame.left;
    			lineRect.right = frame.right;
    			lineRect.top = slideTop;
    			lineRect.bottom = slideTop + 18;
    			canvas.drawBitmap(((BitmapDrawable)(getResources().getDrawable(R.drawable.qrcode_scan_line))).getBitmap(), null, lineRect, paint);

    那条扫描线自己去微信里面找一下,我贴出来的失真了,下载微信apk,将后缀名改成zip,然后解压就行了

    画扫描框下面字体的代码需要修改下,这样子能根据字体自动排列在中间,如果字太长我没有处理,那个要自动换行,你可以自行处理

    paint.setColor(Color.WHITE);  
    paint.setTextSize(TEXT_SIZE * density);  
    paint.setAlpha(0x40);  
    paint.setTypeface(Typeface.DEFAULT_BOLD); 
    String text = getResources().getString(R.string.R.string.scan_text);
    float textWidth = paint.measureText(text);
    
    canvas.drawText(text, (width - textWidth)/2, (float) (frame.bottom + (float)TEXT_PADDING_TOP *density), paint)

    运行界面截图,其中中间的那根绿色的线会上下移动,跟微信的效果差不多,当然运行你还需要相对应的权限问题,有兴趣的朋友可以去下载demo



    从8点多写这篇博客写到现在,看起来这么点字,但实际上还是比较耗时间的,如果你觉得这篇文章对你有帮助,你就顶一下,哈哈,洗澡睡觉去了,上面的项目中还有一些资源文件我没有贴出来,想要看效果可以下载源码


    我在Android 基于google Zxing实现对手机中的二维码进行扫描这篇文章中实现了对手机中二维码照片的扫描,并且替换了中间的扫描线,和微信效果更加相似,建议大家去下那文章的项目源码


    项目源码,点击下载




    展开全文
  • 条形码、二维码扫描、生成Demo 完整源码

    万次下载 热门讨论 2012-08-05 12:58:49
    使用Google ZXing开源项目制作的条形码、二维码的生成、扫描Demo
  • 二维码

    2009-07-16 22:43:00
    今天从税务局拿过来的单子上面竟然多了个二维码,不由得想写点二维码的东东,看来二维码在国内的应用会越来越广泛了,不经意间又会多出很多应用 手机对二维码的支持可算是够NB了,不过感觉Android 下面最方便普通的...

    今天从税务局拿过来的单子上面竟然多了个二维码,不由得想写点二维码的东东,看来二维码在国内的应用会越来越广泛了,不经意间又会多出很多应用

     

     

    手机对二维码的支持可算是够NB了,不过感觉Android 下面最方便普通的程序员就可以利用系统提供的API 编写自己的二维码应用,以前在J2ME平台上面自己试图去编写二维码应用,看了几个开源项目,好像有一个是小日本写的解码器,感觉用起来还可以,不过由于J2ME 中对于摄像头的 操作不是很理想,对图像帧的识别速度也不行,识别的效率就不是很高了。现在Android 上面的实现就简单多了,推荐做二维码项目的朋友可以参考下这个类库。

    http://code.google.com/p/zxing/

    ZXing ("Zebra Crossing")

    ZXing (pronounced "zebra cro

     

    展开全文
  • 1行Python代码制作动态二维码

    万次阅读 多人点赞 2019-09-07 18:02:42
    近日在GitHub上发现了一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码、艺术二维码(黑白/彩色)和动态GIF二维码

    目录

    1、二维码简介

    2、普通二维码

    3、艺术二维码

    4、动态二维码


    1、二维码简介

    目前流行的二维码(QR code)是1994年由日本Denso-Wave公司发明的。英文字中 QR 所代表的意义是Quick Response,即快速反应。QR code最早用于汽车制造商追踪零件,目前已应用于各行各业。它的最大特点是可以存储比普通条形码更多的数据,同时也无须对准扫描仪。

    二维码由边框区数据区所组成,数据区由定位标记、校正图块、版本信息、原始信息、容错信息所组成,这些信息经过编码后产生二进制字符串,白色格子代表 0,黑色格子代表 1,这些格子一般又称作模块。

    其实经过编码后,还会使用屏蔽(masking)方法将原始二进制字符串与屏蔽图案(Mask Pattern)做 XOR 运算,产生实际的编码,经过处理后的 QR code 辨识率将更高。QR code基本外观如下 :

    • 边框区:也可以称为非数据区,主要是避免 QR code 周围的图像影响辨识。

    • 定位标记:在上述图片中,左上、左下、右上是定位标记,外型类似“回”字,在使用 QR code 扫描时我们可以发现不用完全对准也可以,主要是这 3 个定位标记在帮助扫描定位。

    • 校正图块:主要用于校正辨识。

    • 容错修功能:QR code 有容错功能,所以如果 QR code 有破损,有时仍然可以读取,一般 QR code 的面积越大,容错能力越强。

    QR code 目前有 40 个不同版本,版本 1 是 21×21 个模块。模块是 QR code 最小的单位,每增加一个版本,长宽各增加 4 个模块,所以版本 40 是由 177×177 个模块组成,下列是以版本 40 为例做容量解说。

    近日在GitHub上发现了一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码、艺术二维码(黑白/彩色)和动态GIF二维码。

    GitHub网站参见:https://github.com/sylnsfar/qrcode

    用法比较简单,直接通过pip安装即可。

    pip3 install myqr

    安装过程如下所示: 

    安装完成后,就可以基于命令指令生成想要的二维码了,myqr模块参数说明如下:

    主要参数翻译如下:

    -v :定义二维码的大小,范围为 1 ~ 40,默认大小取决于输入的内容

    -l : 定义二维码纠错率,也就是说二维码被遮挡一部分仍然被识别出来,有四个等级,分别是L(7%)、M(15%)、Q(25%)、H(30%),默认情况是最高等级的H

    -n :自定义二维码的名称

    -d : 自定义二维码的路径

    -con:修改图片的对比度,默认值为1.0

    -bri :修改图片的亮度,默认值也为1.0

    2、普通二维码

    生成我的博客地址二维码,使用指令如下:

    myqr https://me.csdn.net/blog/m0_38106923

    二维码自动保存在当前目录下,默认名字为 qrcode.png。

    效果如下: 

    若需要修改生成二维码的名称或者路径可以通过以下的命令来完成,例如生成一个Python3X.jpg的二维码图片,路径在E盘的根目录,指令如下:

    myqr https://me.csdn.net/blog/m0_38106923 -n Python3X.jpg -d E:

    对于二维码,可以自定义它的大小和容错纠错能力。 

    例如生成大小为10,纠错率为M等级的二维码,指令如下:

    myqr https://me.csdn.net/blog/m0_38106923 -v 10 -l M

    3、艺术二维码

     有时候为了吸引大家的注意力,普通二维码的效果就会力不从心。所以可以通过艺术二维码的形式,生成的方式也很简单。

    例如将我在网上找的魔童哪吒的照片结合我的博客地址,生成二维码。

    可以通过参数 -p 去完成,指令如下: 

    myqr https://me.csdn.net/blog/m0_38106923 -p C:\Users\13450\Desktop\im1.png

    效果如下: 

    结果是黑白的,不太理想,这个时候,就需要用到另一个参数-c,用于图片的着色,指令如下:

    myqr https://me.csdn.net/blog/m0_38106923 -p C:\Users\13450\Desktop\im1.png -c

    效果如下:

    4、动态二维码

    艺术二维码虽然好看多了,但是依旧无法达到我们装X的目的,so,可以来个动态的二维码。

    方式跟上面的艺术二维码一样,唯一的区别就是图片必须是gif。默认也是黑白的,彩色二维码也需要加上参数 -c。

    使用下图动图结合的博客地址,生成二维码。

    指令如下:

    myqr https://me.csdn.net/blog/m0_38106923 -p C:\Users\13450\Desktop\im1.gif -c

    效果如下:

    展开全文
  • unityZXing二维码的生成与扫描

    万次阅读 多人点赞 2019-01-07 10:50:02
    借鉴自某位大佬不记得了 using System.Collections; using System.Collections.Generic; using UnityEngine; using ZXing;.../// 二维码扫描识别功能 /// &lt;/summary&gt; public class Test...
  • QRCode二维码生成组件(珍藏版)

    千次下载 热门讨论 2014-01-18 15:58:14
    现在网上很多应用都是用二维码来分享网址或者其它的信息。尤其在移动领域,二维码更是有很大的应用场景。因为项目的需要,需要在网站中增加一个生成二维码分析网址的功能,在谷歌大幅度抽筋的情况下无奈使用百度。...
  • Java实现二维码生成 Google-Zxing

    万次阅读 多人点赞 2019-01-08 00:12:40
    本篇文章将介绍java中如何生成二维码二维码的展示主要包括两各方面:1.直接生成图片(直接生成图片不需要web程序,maven工程即可) 2.将二维码转为字节数组,然后在web页面显示。web项目的目录结构以前面的一篇...
  • 扫描二维码的url(个人码、收款码、支付码、群聊码都支持) 直接百度二维码在线扫描,把你的二维码上传扫描结果 我用的是草料二维码扫描器:https://cli.im/deqr 生成新的二维码 把你二维码扫描结果辅助粘贴到生成器...
  • C# 利用QRCode生成二维码图片

    万次阅读 多人点赞 2014-01-18 10:04:30
    网上生成二维码的组件是真多,可是真正好用的,并且生成速度很快的没几个,QRCode就是我在众多中找到的,它的生成速度快。但是网上关于它的使用说明,真的太少了,大都是千篇一律的复制粘贴。这是本要用它做了一个...
  • 1. 二维码在线生成: 1.1 浏览器测试:http://api.online-service.vip/qr/create?w=150&h=150&c=test 1.2 可在html的img标签src属性中直接引用; 如果二维码的属性相对固定, 可以把二维码保存下来, 二维码...
  • 之前我写过一篇博客是关于如何将zxing集成到Android...扫描速度也比较慢,功能不是很全,没有闪光灯,生成二维码,解析二维码图片,解析条码图片等。 这几天抽了点时间,将之前的代码完善了一下,主要是修复了一些b...
  • c#二维码生成

    千次下载 热门讨论 2013-10-23 16:59:03
    ASP.NET 二维码生成源码,Web界面,输入需要转换的文字或字符串,生成对应的二维码。代码精简,函数封装,便于复用。
  • JS识别二维码、JS生成二维码

    万次阅读 2018-06-30 16:28:37
    最近的项目中使用到了识别二维码和生成二维码,都是用JS生成的,应用在了移动端,在网上搜罗了许多进行验证,下面是我在项目中应用的: 识别二维码 1.JS文件和测试页面压缩包:...
  • 超简单集成Android Zxing实现扫一扫二维码

    万次阅读 多人点赞 2016-10-13 10:54:35
    最新版本的请看http://blog.csdn.net/yuzhiqiang_1993/article/details/78292004,优化了扫描速度,修复了一些bug,增加了闪光灯,解析二维码图片,生成二维码等功能,简化了集成步骤。 因为按下文方法集成...
  • 二维码解析成链接 二维码解码

    千次阅读 2019-10-17 15:59:36
    左侧上传二维码就可以进行解析,右边会自动生成网址链接, 点击去解析
  • Python二维码应用(一)QRcode二维码生成&识别

    万次阅读 多人点赞 2019-01-05 20:35:39
    基于Python的二维码实验一、机器视觉之QRcode二、基于Python的QRcodetest(一)配置环境(二)生成自己的二维码(三)识别二维码三、调用opencv库摄像头识别图像 一、机器视觉之QRcode 问:什么是QRcode呢? 答...
  • java实现二维码的生成与解析

    万次阅读 多人点赞 2018-09-23 01:35:17
    之前在做一个小项目的时候,用到了二维码技术,我同学看到我的项目后就问我怎么做到的,我一时半会也说不清,于是就想写一篇文章简单介绍一下二维码技术,下次再有同学问到,我就直接给他看我的博客就好了,哈哈。...
  • 二维码生成原理及解析代码

    万次阅读 多人点赞 2017-12-18 22:35:06
    二维码生成原理及解析代码 自从大街小巷的小商小贩都开始布满了腾讯爸爸和阿里爸爸的二维码之后,我才感觉到我大天朝共享支付的优越性。最近毕业论文写的差不多了,在入职之前多学一些东西也是好的。这里秉着好奇心...
  • 二维码登陆

    万次阅读 热门讨论 2015-06-05 18:21:57
    二维码登陆又称扫码登陆,...服务商事前提供二维码,使用者使用服务商提供的APP扫描二维码,完成登录操作。登陆过程中无需输入用户名、密码。二维码登陆即保证的用户信息安全,有提高了登陆效率,同时也易于用户使用。
  • @[](python生成二维码、动态二维码 和 而二维码解析(20190129)) 就是为了好玩所以想搞一下二维码,“好玩”,少年醒醒,不要骗自己啦,起来干活啦!!! 一、二维码介绍 ...
  • Java实现二维码制作

    万次阅读 2017-08-06 22:41:32
    二维码
  • 为了实现app扫描二维码,我想了很多办法,最后还是用原生的来挑战自己,下面是链接 http://www.html5plus.org/doc/zh_cn/barcode.html
  • android中最火的二维码开源库,ZxingLibrary 可以扫描二维码,生成二维码等功能。生成二维码和扫描二维码教程请看博文:http://blog.csdn.net/qq_21376985/article/details/51327291
  • 1.在微信打开这个二维码右键识别二维码链接,获取二维码链接 2.在百度搜索草料二维码,选择网址,输入刚才图片转换后的链接,点击生成就可以生成二维码 3.二维码生成后点击二维码下的上传logo即可上传自己的...
  • pb生成二维码

    千次下载 热门讨论 2011-11-26 10:21:47
    pb生成二维码源代码 二维码是QR 二维码 QR码是二维条码的一种,QR 来自英文 “Quick Response” 的缩写,即快速反应的意思,源自发明者希望 QR 码可让其内容快速被解码。QR码比普通条码可储存更多资料,亦无需像...

空空如也

1 2 3 4 5 ... 20
收藏数 63,059
精华内容 25,223
关键字:

二维码