android 带与不带logo的二维码生成

2024-06-24 13:18

本文主要是介绍android 带与不带logo的二维码生成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

该代码基于ZXing项目,这个网上能下载得到。

定义的控件以及属性:

  public static final int SCAN_CODE = 1;private  ImageView iv;private EditText et;private Button qr_btn,add_logo;private Bitmap logo,bitmap,bmp; //logo图标private static final int IMAGE_HALFWIDTH = 40;//宽度值,影响中间图片大小private Uri outputFileUri;

获取图标代码

//获取logo图片资源
add_logo = (Button) findViewById(R.id.add_logo);
add_logo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getPicture();
}
});

其中getPicture()方法在上章获取图片方式中有给出。http://blog.csdn.net/u012138137/article/details/52063066 也就是把监听方法改成getPicture()的无返回值方法。再不然就直接把里面的内容全都复制到这个点击监听事件中就好了。

 /***不带logo的二维码* @param url 需要生成的地址*/public Bitmap createQRImage(String url){try{//判断URL合法性if (url == null || "".equals(url) || url.length() < 1){return null;}Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//图像数据转换,使用了矩阵转换BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, 300, 300, hints);int[] pixels = new int[300 * 300];//下面这里按照二维码的算法,逐个生成二维码的图片,//两个for循环是图片横列扫描的结果for (int y = 0; y < 300; y++){for (int x = 0; x < 300; x++){if (bitMatrix.get(x, y)){pixels[y * 300 + x] = 0xff0000ff;}else{pixels[y * 300 + x] = 0xffffff00;}}}//生成二维码图片的格式,使用ARGB_8888Bitmap bitmap = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888);bitmap.setPixels(pixels, 0, 300, 0, 0, 300, 300);//显示到一个ImageView上面return bitmap;}catch (WriterException e){e.printStackTrace();}return null;}/*** 生成二维码,带Logo* @param string 二维码中包含的文本信息* @param mBitmap logo图片* @param format 编码格式* @return Bitmap 位图* @throws WriterException*/public Bitmap createCode(String string,Bitmap mBitmap)throws WriterException {Matrix m = new Matrix();float sx = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getWidth();float sy = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getHeight();m.setScale(sx, sy);//设置缩放信息//将logo图片按martix设置的信息缩放mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), m, false);MultiFormatWriter writer = new MultiFormatWriter();Hashtable hst = new Hashtable();hst.put(EncodeHintType.CHARACTER_SET, "UTF-8");//设置字符编码BitMatrix matrix = writer.encode(string, BarcodeFormat.QR_CODE, 400, 400, hst);//生成二维码矩阵信息int width = matrix.getWidth();//矩阵高度int height = matrix.getHeight();//矩阵宽度int halfW = width / 2;int halfH = height / 2;int[] pixels = new int[width * height];//定义数组长度为矩阵高度*矩阵宽度,用于记录矩阵中像素信息for (int y = 0; y < height; y++) {//从行开始迭代矩阵for (int x = 0; x < width; x++) {//迭代列if (x > halfW - IMAGE_HALFWIDTH && x < halfW + IMAGE_HALFWIDTH&& y > halfH - IMAGE_HALFWIDTH&& y < halfH + IMAGE_HALFWIDTH) {//该位置用于存放图片信息//记录图片每个像素信息pixels[y * width + x] = mBitmap.getPixel(x - halfW+ IMAGE_HALFWIDTH, y - halfH + IMAGE_HALFWIDTH); } else {if (matrix.get(x, y)) {//如果有黑块点,记录信息pixels[y * width + x] = 0xff000000;//记录黑块信息}}}}Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);// 通过像素数组生成bitmapbitmap.setPixels(pixels, 0, width, 0, 0, width, height);return bitmap;}

在MainActivity中使用:

  qr_btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {try {String result = et.getText().toString().trim();if(TextUtils.isEmpty(result)||"".equals(result)||result.length()<=0){Toast.makeText(MainActivity.this,"生成地址不能为空",Toast.LENGTH_SHORT).show();return;}else {if(bmp!=null){//带图片bitmap = createCode(result,bmp);iv.setImageBitmap(bitmap);}else{//不带图片bitmap = createQRImage(result);iv.setImageBitmap(bitmap);}}} catch (WriterException e) {e.printStackTrace();}}});

这篇关于android 带与不带logo的二维码生成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090255

相关文章

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle