将文字生成qrcode二维码

在项目中我是想实现通过摄像头拍照,然后将拍照的照片生成qrcode图片,然后再解析里面的文字信息。。不过,目前只找到将字符串生成qrcode图片的代码。。。

要生成qrcode二维码需要在项目添加zxing1.6 的 core.jar包。
Activity:

package com.create.qrcode;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import com.google.zxing.BarcodeFormat;
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.os.Bundle;
import android.os.Handler;
import android.util.Base64;

public class CreateQRCodeActivity extends Activity {
private Bitmap bitmap;
private Handler mHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// String content = "74657374696E67";
new Thread(new Runnable() {

public void run() {
// TODO Auto-generated method stub
// String content = GetImageStr("/mnt/sdcard/test.jpg");
// String str = hex2bin(content);
String str = "testing...";
System.out.println("str : " + str);
long a = System.currentTimeMillis();
bitmap = CreateQRCodeActivity.this.createBitmap(str);
final long b = System.currentTimeMillis();
System.out.println("bitmap 耗时:" + (b - a) + ",bitmap : " + bitmap);
mHandler.post(new Runnable() {

public void run() {
setContentView(new BitmapView(CreateQRCodeActivity.this, bitmap));
long c = System.currentTimeMillis();
System.out.println("setContentview 耗时:" + (c - b));
}
});
}
}).start();
}


/**
* 十六进制转换字符串
* @param hex String 十六进制
* @return String 转换后的字符串
*/
public static String hex2bin(String hex) {
String digital = "0123456789ABCDEF";
char[] hex2char = hex.toCharArray();
byte[] bytes = new byte[hex.length() / 2];
int temp;
for (int i = 0; i < bytes.length; i++) {
temp = digital.indexOf(hex2char[2 * i]) * 16;
temp += digital.indexOf(hex2char[2 * i + 1]);
bytes[i] = (byte) (temp & 0xff);
}
return new String(bytes);
}

public static String GetImageStr(String imgFilePath) {
if (imgFilePath == null || imgFilePath == "") {
return "";
}
File file = new File(imgFilePath);
if (!file.exists()) {
return "";
}
byte[] data = null;
try {
InputStream in = new FileInputStream(imgFilePath);
data = getByte(in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
String imageString = Base64.encodeToString(data, Base64.DEFAULT);
return imageString;
}

public static byte[] getByte(InputStream in) {
if (in == null) {
return null;
}
int sumSize = 0;
List<byte[]> totalBytes = new ArrayList<byte[]>();
byte[] buffer = new byte[1024];
int length = -1;
try {
while ((length = in.read(buffer)) != -1) {
sumSize += length;
byte[] tmp = new byte[length];
System.arraycopy(buffer, 0, tmp, 0, length);
totalBytes.add(tmp);
}
byte[] data = new byte[sumSize];
int start = 0;
for (byte[] tmp : totalBytes) {
System.arraycopy(tmp, 0, data, start, tmp.length);
start += tmp.length;
}
return data;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

public Bitmap createBitmap(String str) {
try {
BitMatrix matrix = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, 300, 300);
int width = matrix.width;
int height = matrix.height;
int[] pixels = new int[width*height];
for(int y = 0; y<width; ++y){
for(int x = 0; x<height; ++x){
if(matrix.get(x, y)){
pixels[y*width+x] = 0xff000000; // black pixel
} else {
pixels[y*width+x] = 0xffffffff; // white pixel
}
}
}
Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bmp.setPixels(pixels, 0, width, 0, 0, width, height);
return bmp;
} catch (WriterException e) {
e.printStackTrace();
}
return null;
}


}

BitmapView.java

package com.create.qrcode;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.View;

public class BitmapView extends View {
Bitmap bitmap;

public BitmapView(Context context, Bitmap bitmap) {
super(context);
this.bitmap = bitmap;
}

@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setFilterBitmap(true);

double aspectRatio = ((double)bitmap.getWidth())/bitmap.getHeight();
Rect dest = new Rect(0,0,this.getWidth(), (int)(this.getHeight()/aspectRatio));
canvas.drawBitmap(bitmap, null, dest, paint);
}
}


将文字生成qrcode二维码 - 无尘 - 无尘的博客
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在VB.Net中生成光栅二维码可以使用第三方库,例如ZXing库。以下是使用ZXing库在VB.Net中生成光栅二维码的步骤: 1. 首先,需要安装ZXing.Net扩展库。可以使用NuGet包管理器将ZXing.Net库添加到VB.Net项目中。 2. 导入ZXing库的命名空间,在需要生成二维码的代码文件中添加以下代码: ```vb Imports ZXing Imports ZXing.Common Public Sub GenerateQRCode(text As String, filePath As String) ' 创建二维码写入器对象 Dim writer As New BarcodeWriter ' 设置编码格式为QR码 writer.Format = BarcodeFormat.QR_CODE ' 设置二维码大小 writer.Options = New EncodingOptions With {.Width = 300, .Height = 300} ' 创建二维码矩阵 Dim matrix As BitMatrix = writer.Encode(text) ' 将二维码矩阵换为图片 Dim qrCodeBitmap As New Bitmap(matrix.Width, matrix.Height) For y As Integer = 0 To matrix.Height - 1 For x As Integer = 0 To matrix.Width - 1 qrCodeBitmap.SetPixel(x, y, If(matrix(x, y), Color.Black, Color.White)) Next Next ' 保存二维码图片 qrCodeBitmap.Save(filePath, Imaging.ImageFormat.Png) End Sub ``` 3. 调用以上函数来生成二维码。将需要生成二维码的文本和保存路径传递给该函数即可: ```vb Dim text As String = "Hello World!" Dim filePath As String = "C:\path\to\save\qrcode.png" GenerateQRCode(text, filePath) ``` 以上代码将生成一个宽度和高度为300像素的二维码,保存在指定路径下。可以根据需要调整二维码大小和保存路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值