Android使用ZXing生成带图片的二维码

效果图如下:

制作过程很简单的就是在原始的二维码图片上添加一个logn图标,代码的注释写得很详细,也就不给大家啰嗦了

package com.example.day44_02_qrcodewithlogin;

import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ImageView;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

public class MainActivity extends Activity {
    private ImageView imageView_main ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}

	private void initView() {
		imageView_main = (ImageView) findViewById(R.id.imageView_main);
		String content = "我们要毕业了";
		createQRCode(content,500,500);
	}

	/**
	 * 用于创建一个二维码
	 * @param content
	 * @param width
	 * @param height
	 */
	private void createQRCode(String content, int width, int height) {

		try {
			//1,创建实例化对象
			QRCodeWriter writer = new QRCodeWriter() ;
			//2,设置字符集
			Map<EncodeHintType, String>  map = new HashMap<EncodeHintType, String>();
			map.put(EncodeHintType.CHARACTER_SET, "UTF-8");
			//3,通过encode方法将内容写入矩阵对象
			BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height,map);
		    //4,定义一个二维码像素点的数组,向每个像素点中填充颜色
			int[] pixels = new int[width*height];
		    //5,往每一像素点中填充颜色(像素没数据则用黑色填充,没有则用彩色填充,不过一般用白色)
			for (int i = 0; i < height; i++) {
				for (int j = 0; j < width; j++) {
					if (matrix.get(j, i)) {
						pixels[i*width+j] = 0xff000000;
					}else {
						pixels[i*width+j] = 0xffffffff;
					}
				}
			}
			//6,创建一个指定高度和宽度的空白bitmap对象
			Bitmap bm_QR = Bitmap.createBitmap(width, height, Config.ARGB_8888);
		    //7,将每个像素的颜色填充到bitmap对象
			bm_QR.setPixels(pixels, 0, width, 0, 0, width, height);

			//8,创建一个bitmap对象用于作为其图标
			Bitmap bm_login = BitmapFactory.decodeResource(getResources(), R.drawable.img_kf_qq);
			//9,创建一个方法在二维码上添加一张图片
			if (addLogin(bm_QR,bm_login) != null) {
				imageView_main.setImageBitmap(addLogin(bm_QR,bm_login));
			}

		} catch (WriterException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/**
	 * 用于向创建的二维码中添加一个logn
	 * @param bm_QR
	 * @param bm_login
	 * @return
	 */
	private Bitmap addLogin(Bitmap bm_QR, Bitmap bm_login) {
		if (bm_QR == null) {
			return null;
		}
		if (bm_login == null) {
			return bm_QR ;
		}

		//获取图片的宽高
		int bm_QR_Width = bm_QR.getWidth() ;
		int bm_QR_Height = bm_QR.getHeight();
		int bm_login_Width = bm_login.getWidth() ;
		int bm_login_Height = bm_login.getHeight();

		//设置logn的大小为二维码整体大小的1/5
		float scale_login = bm_QR_Width*1.0f /5/bm_login_Width ;
		Bitmap bitmap = Bitmap.createBitmap(bm_QR_Width, bm_QR_Height, Bitmap.Config.ARGB_8888);

		 try {
	            Canvas canvas = new Canvas(bitmap);
	            canvas.drawBitmap(bm_QR, 0, 0, null);
	            canvas.scale(scale_login, scale_login, bm_QR_Width / 2, bm_QR_Height / 2);
	            canvas.drawBitmap(bm_login, (bm_QR_Width - bm_login_Width) / 2, (bm_QR_Height - bm_login_Height) / 2, null);

	            canvas.save(Canvas.ALL_SAVE_FLAG);
	            canvas.restore();
	        } catch (Exception e) {
	            bitmap = null;
	            e.getStackTrace();
	        }

	        return bitmap;

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

  

时间: 2024-10-25 15:07:48

Android使用ZXing生成带图片的二维码的相关文章

Android生成带图片的二维码

一.问题描述 在开发中需要将信息转换为二维码存储并要求带有公司的logo,我们知道Google的Zxing开源项目就很好的帮助我们实现条形码.二维码的生成和解析,但带有logo的官网并没有提供demo,下面就通过实例看看如何实现以及Zxing的使用. 二.案例介绍 1.案例运行效果 2.案例准备工作 在项目中加入jar,只需加入core.jar Zxing项目地址:https://github.com/zxing/zxing/ 三.Zxing主要组件 1.BarcodeFormat 定义了不同的

友盟自定义分享-生成带图片的二维码,自定义分享布局

public class UmengShare { private Activity activity = null; private UMSocialService mController = null; private Dialog shareDialog = null; private Bitmap bitmapCode = null; public UmengShare(Activity activity){ this.activity = activity; } public void

.NET使用ZXing.NET生成中间带图片的二维码

很久之前就有写这样的代码了,只是一直没记录下来,偶然想写成博客. 把之前的代码封装成函数,以方便理解以及调用. 基于开源的 ZXing.NET 组件,代码如下: 先添加对ZXing.NET的引用,然后添加相应的命名空间: using System; using System.Collections.Generic; using System.Drawing; using ZXing; using ZXing.Common; using ZXing.QrCode; using ZXing.QrCo

C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(一)

一.ZXing.Net 源代码地址:http://zxingnet.codeplex.com/ 也可以使用Nuget包管理,添加如图: 说明:ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME.J2SE和Android.现在也有了对应的.Net版本 二.生成二维码 将字符编码时可以指定字符格式:默认为ISO-8859-1英文字符集,但一般移动设备常用UTF-8字符

Java使用zpxing.jar生成带url的二维码

第一步下载zpxing.jar包,并加载进来(网上有很多类似的jar包,这里小编使用的是谷歌提供的jar) 二维码工具类: package com.zpxing.controller; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Shape; import java.awt.geom.RoundRe

生成带logo的二维码

一,生成带log的二维码 1)生成的二维码是流返回,或者是直接写到指定文件夹 二,准备资料 1)引入jar包 <!-- https://mvnrepository.com/artifact/com.google.zxing/core --> <!-- 二维码生成器 --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId&g

微信公众平台功能开发(生成带参数的二维码)

为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送. 目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--100000).两种二维码分别适用于帐号绑定.用户来源统计等场景. 用户扫描带场景值二维码时,可能推送以下两种事件: 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事

C#微信开发之旅(六):生成带参数的二维码

主要用来推广并统计数据,当用户扫描带参数二维码时,微信会推送消息到我们的服务器,此时可以根据参数了解到用户是从哪个渠道关注的.话不多少,先来代码: 1 #region 生成二维码 2 3 /// <summary> 4 /// 获取Ticket 5 /// </summary> 6 /// <returns></returns> 7 private static string CreateTicket(string scene_id) 8 { 9 var t

涛哥的Python脚本工具箱之生成带Logo的二维码

近期须要在二维码上加Logo,网上没有找到好用的,于是自己用python写了一个. 须要安装qrcode,PIL库 二维码简称 QR Code(Quick Response Code),学名为高速响应矩阵码,是二维条码的一种.由日本的 Denso Wave 公司于 1994 年发明. 现随着智能手机的普及.已广泛应用于寻常生活中,比如商品信息查询.社交好友互动.网络地址訪问等等. 安装 Python 的二维码库 -- qrcode pip install qrcode 因为生成 qrcode 图