• 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;
    	}
    
    }
    

      

  • 相关阅读:
    黑客网银木马服务器曝光 14家银行网银遭监控 狼人:
    卡巴斯基实验室CE0来华启动卡巴斯基安全中国行 狼人:
    天清汉马UTM获“北京市自主创新产品”称号 狼人:
    IBM称欧亚受Conficker病毒感染最严重 狼人:
    卡巴斯基联手功夫巨星成龙 五月鸟巢开唱 狼人:
    微软4月14日起不再为所有XP用户提供安全补丁 狼人:
    卡巴斯基爱好者见面会 卡巴斯基先生与卡fans亲密互动 狼人:
    愚人节黑客以身试法 人民法院被挂马 狼人:
    微软:97%电子邮件属于垃圾邮件 狼人:
    4月3日 尤金.卡巴斯基在北大精彩演讲 狼人:
  • 原文地址:https://www.cnblogs.com/wjtaigwh/p/4960143.html
Copyright © 2020-2023  润新知