- 浏览: 75527 次
- 性别:
- 来自: 武汉
文章分类
最新评论
github:
https://github.com/billcarbit/QRCodeDemo
https://github.com/billcarbit/QRCodeDemo
package qrcode.com.qrcodedemo; /** * Created by Administrator on 2016-11-27. */ import android.graphics.Bitmap; import android.graphics.Canvas; 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; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; /** * 二维码生成工具类 */ public class QRCodeUtils { /** * 生成二维码Bitmap * * @param content 内容 * @param widthPix 图片宽度 * @param heightPix 图片高度 * @param logoBm 二维码中心的Logo图标(可以为null) * @param filePath 用于存储二维码图片的文件路径 * @return 生成二维码及保存文件是否成功 */ public static boolean createQRImage(String content, int widthPix, int heightPix, Bitmap logoBm, String filePath) { try { if (content == null || "".equals(content)) { return false; } //配置参数 Map<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); //容错级别 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); //设置空白边距的宽度 // hints.put(EncodeHintType.MARGIN, 2); //default is 4 // 图像数据转换,使用了矩阵转换 BitMatrix bitMatrix = null; bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix, heightPix, hints); int[] pixels = new int[widthPix * heightPix]; // 下面这里按照二维码的算法,逐个生成二维码的图片, // 两个for循环是图片横列扫描的结果 for (int y = 0; y < heightPix; y++) { for (int x = 0; x < widthPix; x++) { if (bitMatrix.get(x, y)) { pixels[y * widthPix + x] = 0xff000000; } else { pixels[y * widthPix + x] = 0xffffffff; } } } // 生成二维码图片的格式,使用ARGB_8888 Bitmap bitmap = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix); if (logoBm != null) { bitmap = addLogo(bitmap, logoBm); } //必须使用compress方法将bitmap保存到文件中再进行读取。直接返回的bitmap是没有任何压缩的,内存消耗巨大! return bitmap != null && bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(filePath)); } catch (WriterException | IOException e) { e.printStackTrace(); } return false; } /** * 在二维码中间添加Logo图案 */ private static Bitmap addLogo(Bitmap src, Bitmap logo) { if (src == null) { return null; } if (logo == null) { return src; } //获取图片的宽高 int srcWidth = src.getWidth(); int srcHeight = src.getHeight(); int logoWidth = logo.getWidth(); int logoHeight = logo.getHeight(); if (srcWidth == 0 || srcHeight == 0) { return null; } if (logoWidth == 0 || logoHeight == 0) { return src; } //logo大小为二维码整体大小的1/5 float scaleFactor = srcWidth * 1.0f / 5 / logoWidth; Bitmap bitmap = Bitmap.createBitmap(srcWidth, srcHeight, Bitmap.Config.ARGB_8888); try { Canvas canvas = new Canvas(bitmap); canvas.drawBitmap(src, 0, 0, null); canvas.scale(scaleFactor, scaleFactor, srcWidth / 2, srcHeight / 2); canvas.drawBitmap(logo, (srcWidth - logoWidth) / 2, (srcHeight - logoHeight) / 2, null); canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore(); } catch (Exception e) { bitmap = null; e.getStackTrace(); } return bitmap; } }
package qrcode.com.qrcodedemo; import android.content.Context; import android.graphics.BitmapFactory; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView; import java.io.File; import rx.Observable; import rx.Observer; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ImageView imageView = (ImageView) findViewById(R.id.iv_qrcode); final String filePath = getFileRoot(MainActivity.this) + File.separator + "qr_" + System.currentTimeMillis() + ".jpg"; //二维码图片较大时,生成图片、保存文件的时间可能较长,因此放在新线程中 Observable.create(new Observable.OnSubscribe<Boolean>() { @Override public void call(Subscriber<? super Boolean> subscriber) { Boolean success = QRCodeUtils.createQRImage("www.baidu.com".toString().trim(), 800, 800, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher), filePath); subscriber.onNext(success); subscriber.onCompleted(); } }).subscribeOn(Schedulers.io()) // 指定 subscribe() 发生在 IO 线程 .observeOn(AndroidSchedulers.mainThread()) // 指定 Subscriber 的回调发生在主线程 .subscribe(new Observer<Boolean>() { @Override public void onNext(Boolean success) { if (success) { imageView.setImageBitmap(BitmapFactory.decodeFile(filePath)); } } @Override public void onCompleted() { } @Override public void onError(Throwable e) { } }); } //文件存储根目录 private String getFileRoot(Context context) { if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { File external = context.getExternalFilesDir(null); if (external != null) { return external.getAbsolutePath(); } } return context.getFilesDir().getAbsolutePath(); } }
发表评论
-
android中string.xml通配符以及颜色
2016-11-29 21:42 1816string.xml <resources> ... -
android将视频文件转化为图片
2016-11-24 00:04 2186public void getBitmapsFromVi ... -
android通过文件管理器选择文件
2016-11-22 23:36 1903public void openSystemF ... -
将bitmap保存为文件
2016-11-22 23:28 1428public void saveBitmap(Bitma ... -
Material Design动画(一)reveal effect
2016-09-22 22:47 500Animator animator = ViewAn ... -
Android将apk放置于asset目录下安装
2016-09-13 16:32 1127ServiceApkInstaller.java publ ... -
创建自定义控件在布局中的自定义属性
2016-09-11 21:15 6611.在values目录下新建attrs.xml < ... -
androidstudio搭建NDK开发环境
2016-09-08 18:53 20501.打开SDK Manager下载NDK 2.设置根目录中的 ... -
[Android Studio 权威教程]AS添加第三方库的6种方式(Jar,module,so等)
2016-09-05 18:07 847http://blog.csdn.net/yy13003263 ... -
android启动其他应用得service
2016-08-31 10:03 760Intent i=new Intent(); i.s ... -
android屏幕分辨率适配工具
2016-07-22 17:22 688下载附件后,执行 java -jar autolayout.j ... -
android不死服务的实现方法
2015-11-20 13:36 1271大部分应用在手机长按home键删除最近程序时,进程会被杀掉,本 ... -
android开机自启广播无效果的曲线解决方案
2015-10-04 23:24 2742AndroidManifest.xml <?xml ... -
坑爹的MediaPlayer.isPlaying()
2015-09-18 14:42 2532在这个安卓手机ROM千奇百怪的时代,MediaPlayer作为 ... -
CompletionService 实践
2015-04-26 20:02 596当向Executor提交批处理任务时,并且希望在它们完 ... -
Bitmap的简单应用
2015-03-23 23:56 806package com.example.b; imp ... -
listpreference
2015-01-07 23:02 648MyPreferencesActivity.java pa ... -
李刚安卓疯狂讲义
2014-02-11 23:30 37压缩分卷5个字 -
android开发工具
2014-01-29 00:07 646android开发工具 -
android 拖动条改变屏幕亮度
2013-04-26 00:29 1283main.xml <?xml version=&qu ...
相关推荐
这是Zxing的源码,没有打包成jar利于学习使用。...使用时注意path的默认地址,Main类中是生成二维码的代码,GetMain类中是读取二维码的代码。 eclipse中Ctrl+Shift+R快速查找类 希望对你有所帮助。
看着网上好看的二维码,也想着自己实现一个,经过3周的理论加开发时间,终于实现,详细介绍请看 https://blog.csdn.net/u011837804/article/details/129229973,本源码基于zxing组件扩展实现了草料二维码99%的功能。...
Android利用zxing生成二维码,识别二维码超详细、超简易demo,解压后用Android studio可直接打开,附教程:https://blog.csdn.net/mountain_hua/article/details/80646089
Android使用ZXing实现二维码扫描和生成二维码 可打开默认二维码扫描页面 支持对图片Bitmap的扫描功能 支持对UI的定制化操作 支持对条形码的扫描功能 支持生成二维码操作 支持控制闪光灯开关
在本项目中,我们关注的是ZXing在生成二维码和条形码方面的应用。首先,我们可以使用ZXing库的API生成标准的黑白二维码和条形码,这些API通常包括设置数据内容、指定编码格式、调整尺寸等功能。生成过程涉及将输入的...
在Java环境下,使用ZXing生成二维码的步骤如下: 1. 引入ZXing库:在项目中添加ZXing的依赖,通常通过Maven或Gradle来管理。对于Maven,可以在pom.xml文件中添加如下依赖: ```xml <groupId>com.google.zxing</...
ZXing java 生成 二维码,ZXing-core-2.3.0.jar
在标题“利用ZXING生成简易二维码”中,提到的核心知识点是使用ZXing库来创建二维码。ZXing库提供了Java、Android以及命令行工具等多种方式来操作二维码。生成二维码的基本步骤包括: 1. **配置ZXing**: 首先,你...
1. **二维码编码**: 首先,我们需要了解如何使用ZXing生成普通的黑白二维码。ZXing的`com.google.zxing.client.j2se.MatrixToImageWriter`类可以将数据编码为矩阵,并转换为位图图像。通过调用`MatrixToImageConfig`...
生成二维码是ZXing库的核心功能之一。二维码可以存储大量的文本信息,如网址、联系信息、文本字符串等。在Java环境中,我们可以使用ZXing的`com.google.zxing.client.j2se.QRCodeWriter`类来创建一个二维码写入器。...
### C# 使用 zXing 插件生成二维码详解 #### 一、概述 在现代软件开发过程中,二维码的使用越来越广泛。它不仅被用于产品跟踪、文档管理等场景,也被广泛应用在移动支付、营销推广等领域。为了更好地实现二维码的...
这个助手类是为了简化使用ZXing生成二维码的过程,通常会封装一些常用方法,如设置二维码的内容、大小、纠错级别等。在实际使用时,只需要在项目中复制这个助手类,然后通过调用其提供的方法,就可以快速地生成...
C#使用ZXing.Net生成二维码和条形码,可以输入的内容生成条码,可以设置条码的宽度和高度,以及各种条码类型,还可以通过拖拽直接识别条码内容 具体操作见:...
一个在 .NET Framework 环境下实现的二维码生成与识别的小程序。 本人综合比较了已有的第三方库,最终选择了 ZXing.Net 。ZXing.Net 是开源项目 https://github.com/zxing/zxing 在 .NET 平台上的实现;虽然 NuGet ...
要使用ZXing.Net在C#中生成包含中文的二维码,首先需要在项目中引入ZXing.Net库。这可以通过NuGet包管理器完成,搜索并安装“ZXing.Net”即可。接下来,我们来看一个简单的代码示例: ```csharp using System....
对于Android开发者,可以直接引入ZXing的Android端库,利用`IntentIntegrator`和`IntentResult`进行集成,实现扫描和生成二维码的功能。 为了更好地理解和实践这些概念,你可以查看压缩包中的`zxing-qrcode`文件,...
在本文中,我们将深入探讨如何在...通过引入ZXing依赖,创建服务类和控制器,我们可以实现一个动态生成二维码的服务,同时允许用户自定义logo。这样的服务在各种应用场景中都非常实用,比如推广链接、电子票务等。
生成二维码的过程则涉及`com.google.zxing.qrcode:`模块。这个模块提供了`QRCodeWriter`类,用于将字符串、URL或其他数据转换成二维码图像。用户可以设定二维码的版本、纠错级别、边距等参数,以适应不同的需求。`...
本实例将详细介绍如何使用ZXing来生成二维码。 首先,ZXing库的引入至关重要。在Java项目中,你可以通过Maven或Gradle将ZXing的相关依赖引入到构建文件中。对于Maven,可以在`pom.xml`文件中添加以下依赖: ```xml...
以下是使用ZXing生成二维码的基本步骤: 1. 引入ZXing库:将`zxing3.3.1.jar`添加到项目的类路径中,如果是Java项目,可以将其放入`lib`目录下,或者在Maven/Gradle构建工具中配置依赖。 2. 创建BitMatrix对象:这...