1. 程式人生 > >android最簡單的生成二維碼demo

android最簡單的生成二維碼demo

package com.example.administrator.twocodedemo;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.PointF;
import android.view.Gravity;
import android.view.View.MeasureSpec;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

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 com.google.zxing.qrcode.QRCodeWriter;

import java.util.Hashtable;

/** 
*
* 	生成條形碼和二維碼的工具
*/
public class ZXingUtils {
	/**
	 * 生成二維碼 要轉換的地址或字串,可以是中文
	 * 
	 * @param url
	 * @param width
	 * @param height
	 * @return
	 */
	public static Bitmap createQRImage(String url, final int width, final int height) {
		try {
			// 判斷URL合法性
			if (url == null || "".equals(url) || url.length() < 1) {
				return null;
			}
			Hashtable hints = new Hashtable();
			hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
			// 影象資料轉換,使用了矩陣轉換
			BitMatrix bitMatrix = new QRCodeWriter().encode(url,
					BarcodeFormat.QR_CODE, width, height, hints);
			int[] pixels = new int[width * height];
			// 下面這裡按照二維碼的演算法,逐個生成二維碼的圖片,
			// 兩個for迴圈是圖片橫列掃描的結果
			for (int y = 0; y < height; y++) {
				for (int x = 0; x < width; x++) {
					if (bitMatrix.get(x, y)) {
						pixels[y * width + x] = 0xff000000;
					} else {
						pixels[y * width + x] = 0xffffffff;
					}
				}
			}
			// 生成二維碼圖片的格式,使用ARGB_8888
			Bitmap bitmap = Bitmap.createBitmap(width, height,
					Bitmap.Config.ARGB_8888);
			bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
			return bitmap;
		} catch (WriterException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 生成條形碼
	 *
	 * @param context
	 * @param contents
	 *            需要生成的內容
	 * @param desiredWidth
	 *            生成條形碼的寬頻
	 * @param desiredHeight
	 *            生成條形碼的高度
	 * @param displayCode
	 *            是否在條形碼下方顯示內容
	 * @return
	 */
	public static Bitmap creatBarcode(Context context, String contents,
									  int desiredWidth, int desiredHeight, boolean displayCode) {
		Bitmap ruseltBitmap = null;
		/**
		 * 圖片兩端所保留的空白的寬度
		 */
		int marginW = 20;
		/**
		 * 條形碼的編碼型別
		 */
		BarcodeFormat barcodeFormat = BarcodeFormat.CODE_128;

		if (displayCode) {
			Bitmap barcodeBitmap = encodeAsBitmap(contents, barcodeFormat,
					desiredWidth, desiredHeight);
			Bitmap codeBitmap = creatCodeBitmap(contents, desiredWidth + 2
					* marginW, desiredHeight, context);
			ruseltBitmap = mixtureBitmap(barcodeBitmap, codeBitmap, new PointF(
					0, desiredHeight));
		} else {
			ruseltBitmap = encodeAsBitmap(contents, barcodeFormat,
					desiredWidth, desiredHeight);
		}

		return ruseltBitmap;
	}

	/**
	 * 生成條形碼的Bitmap
	 *
	 * @param contents
	 *            需要生成的內容
	 * @param format
	 *            編碼格式
	 * @param desiredWidth
	 * @param desiredHeight
	 * @return
	 * @throws WriterException
	 */
	protected static Bitmap encodeAsBitmap(String contents,
										   BarcodeFormat format, int desiredWidth, int desiredHeight) {
		final int WHITE = 0xFFFFFFFF;
		final int BLACK = 0xFF000000;

		MultiFormatWriter writer = new MultiFormatWriter();
		BitMatrix result = null;
		try {
			result = writer.encode(contents, format, desiredWidth,
					desiredHeight, null);
		} catch (WriterException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		int width = result.getWidth();
		int height = result.getHeight();
		int[] pixels = new int[width * height];
		// All are 0, or black, by default
		for (int y = 0; y < height; y++) {
			int offset = y * width;
			for (int x = 0; x < width; x++) {
				pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
			}
		}

		Bitmap bitmap = Bitmap.createBitmap(width, height,
				Bitmap.Config.ARGB_8888);
		bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
		return bitmap;
	}

	/**
	 * 生成顯示編碼的Bitmap
	 *
	 * @param contents
	 * @param width
	 * @param height
	 * @param context
	 * @return
	 */
	protected static Bitmap creatCodeBitmap(String contents, int width,
											int height, Context context) {
		TextView tv = new TextView(context);
		LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
				LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
		tv.setLayoutParams(layoutParams);
		tv.setText(contents);
		tv.setHeight(height);
		tv.setGravity(Gravity.CENTER_HORIZONTAL);
		tv.setWidth(width);
		tv.setDrawingCacheEnabled(true);
		tv.setTextColor(Color.BLACK);
		tv.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
				MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
		tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight());

		tv.buildDrawingCache();
		Bitmap bitmapCode = tv.getDrawingCache();
		return bitmapCode;
	}

	/**
	 * 將兩個Bitmap合併成一個
	 * 
	 * @param first
	 * @param second
	 * @param fromPoint
	 *            第二個Bitmap開始繪製的起始位置(相對於第一個Bitmap)
	 * @return
	 */
	protected static Bitmap mixtureBitmap(Bitmap first, Bitmap second,
										  PointF fromPoint) {
		if (first == null || second == null || fromPoint == null) {
			return null;
		}
		int marginW = 20;
		Bitmap newBitmap = Bitmap.createBitmap(
				first.getWidth() + second.getWidth() + marginW,
				first.getHeight() + second.getHeight(), Config.ARGB_4444);
		Canvas cv = new Canvas(newBitmap);
		cv.drawBitmap(first, marginW, 0, null);
		cv.drawBitmap(second, fromPoint.x, fromPoint.y, null);
		cv.save(Canvas.ALL_SAVE_FLAG);
		cv.restore();

		return newBitmap;
	}

}

相關推薦

android簡單生成demo

package com.example.administrator.twocodedemo; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; impo

Android 把url生成並貼到給定的底圖上

主要是用到了com.google.zxing jar包生成二維碼的功能,這個jar包需要自己接下載  直接上程式碼 public static Bitmap CreateBinaryCodeImageByUrl(String url,Bitmap bottomImg,int dra

Zxing簡單生成

1.匯入依賴 implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.2.5' 2.程式碼  //二維碼圖片控制元件 final ImageView imageView = view.findViewById(R

java支付寶掃支付,簡單生成方法

支付寶掃碼支付 首先申請 appid、app_private_key,publicKey, 直接上程式碼: 方式一:可以禁用支付通道(disable_pay_channels) public static void main(String[] args) thr

Zxing與 Zbar生成簡單的實現方式

Zxing與 Zbar生成二維碼最簡單的實現方式 匯入依賴 implementation 'cn.bingoogolapple:bga-qrcode-zbar:1.2.1' 或者 implementation 'cn.bingoogolapple:bga-qrcode-zxing:1

Android:使用ZXing生成(支持加入Logo圖案)

over rmi api note sta size argb_8888 reat for循環 ZXing是谷歌的一個開源庫。能夠用來生成二維碼、掃描二維碼。本文所介紹的是第一部分。 首先上效果圖: ZXing相關各種文件官方下載地址:https://g

java學習-zxing生成矩陣的簡單例子

map obj 基於 The output 圖片 .get imageio sts 這個例子需要使用google的開源項目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下載jar文件 也可使用maven添加依賴 <de

Android生成--儲存和分享圖片

    之前寫過生成自定義二維碼的兩篇文章:《Android生成自定義二維碼》《Android生成二維碼–拍照或從相簿選取圖片》,下面就介紹一下Android應用內如何儲存以及分享二維碼圖片。   儲存圖片      Adnroid中儲存圖片可

Android 開發功能實現(四)------基於Zxing實現編碼功能(生成,一等)

Android 二維碼開發功能實現(四)------基於Zxing實現編碼功能(生成二維碼,一維碼等) 前言 關於Google的開源庫Zxing,前面也寫了幾遍文章進行介紹.我們先簡單的回顧一下! Android 二維碼的掃碼功能實現(一) 這篇文章主要介紹了,Zxi

Android 生成

1.佈局 Xml <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientati

Android 實現生成

注入開源庫  implementation 'com.google.zxing:core:3.3.0'   import android.graphics.Bitmap; import android.graphics.Canvas; import co

Android Studio生成

> 1:清單檔案 <uses-permission android:name="android.permission.CAMERA" /> > <uses-permission android:name="android.permission.VIBRA

簡單的掃描吐司+生成

1.匯入依賴(build.gradle) implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.4' 2.MainActivity頁面 public class MainActivity extends AppCompat

Android用Zxing掃/生成功能

新年已過,一切恢復真正常,新的一年給自己幾句指引: 光努力還不行,方向很重要。 總是想著最壞的結果,就會讓人失去改變的勇氣。 你當然有權利選擇自己的人生--但只有在你真正強大後,逆行的阻力才會降到最小。 never say never. 下面開始記錄二維碼使用過程

Android Zxing實現掃描條形碼功能仿微信整合閃光燈生成

最近在做android專案需要用到二維碼條形碼掃描功能,我用的是Eclipse網上原始碼大多是GitHup上的Android studio版本的所以我改了一版整合到專案中去。 效果圖: 左邊版本的掃碼框是自定義的。右邊版本的掃碼框和掃描線是圖片因為太醜所以最終換成左邊

Android生成--拍照或從相簿選取圖片

private void handleImageOnKitKat(Intent data) { String imagePath = null; Uri uri = data.getData(); if (DocumentsContract.isDocumentUri(this, ur

Android實現生成

public class EwmActivity extends AppCompatActivity { private EditText text; private Button button; private ImageView i

Android超方便 整合 Zxing實現掃一掃,閃光燈,生成圖片,解析(條碼)等功能

之前我寫過一篇部落格是關於如何將zxing整合到Android Studio中,以及簡單的實現掃一掃功能。 詳情請看:Android Studio整合Zxing掃一掃 但是,上面那篇部落格只有有一個掃一掃功能,而且在低解析度手機上會出現變形的問題。掃描速度也

Android平臺利用Zxing生成與解析圖片中的

轉載請註明http://blog.csdn.net/houkai6/article/details/47102733 1. 生成二維碼 public final class EncodingHandler { private static final int BLACK

Android平臺生成(by google.zxing)

查了大部分的資料,發現android平臺下生成二維碼的例子都是使用谷歌的zxing類,因此仿照某一個帖子編寫了一個demo進行測試,仿照的帖子: https://blog.csdn.net/myname_kk/article/details/77649477 例子中主要用到了BitMatri