二维码相关---java生成二维码名片,并且自动保存到手机通讯录中...
发布日期:2021-06-29 17:56:27
浏览次数:3
分类:技术文章
本文共 4106 字,大约阅读时间需要 13 分钟。
二维码相关---java生成二维码名片,并且自动保存到手机通讯录中...
技术qq交流群:JavaDream:251572072
1.首先介绍一个api. Zxing是Google提供的关于条码 (一维码、二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码 2、二维码的生成 1.1 将Zxing-core.jar 包加入到classpath下。 1.2 二维码的生成需要借助MatrixToImageWriter类, 该类是由Google提供的,可以将该类拷贝到源码中,这里我将该类的源码贴上,可以直接使用。 import com.google.zxing.common.BitMatrix; import javax.imageio.ImageIO; import java.io.File; import java.io.OutputStream; import java.io.IOException; import java.awt.image.BufferedImage; public final class MatrixToImageWriter { private static final int BLACK = 0xFF000000; private static final int WHITE = 0xFFFFFFFF; private MatrixToImageWriter() {} public static BufferedImage toBufferedImage(BitMatrix matrix) { int width = matrix.getWidth(); int height = matrix.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); } } return image; } public static void writeToFile(BitMatrix matrix, String format, File file) throws IOException { BufferedImage image = toBufferedImage(matrix); if (!ImageIO.write(image, format, file)) { throw new IOException("Could not write an image of format " + format + " to " + file); } } public static void writeToStream(BitMatrix matrix, String format, OutputStream stream) throws IOException { BufferedImage image = toBufferedImage(matrix); if (!ImageIO.write(image, format, stream)) { throw new IOException("Could not write an image of format " + format); } } } ------------------------------------------------------------------------ 2.下面创建一个javaproject来生成名片 ------------------------------------------ 项目结构如下: ErWerMa /ErWerMa/src credream credream.main /ErWerMa/src/credream/main/CreQcode.java credream.utils /ErWerMa/src/credream/utils/MatrixToImageWriter.java /ErWerMa/src/Zxing-core.jar ------------------------------------------------------------- package credream.main; import java.io.File; import java.util.HashMap; import java.util.Map; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.common.BitMatrix; import credream.utils.MatrixToImageWriter; public class CreQcode { public static void main(String[] args) { try { //1.下面是我测试用的一个format // BEGIN:VCARD // "VERSION:3.0 // N:李德伟 // EMAIL:1606841559@qq.com // TEL:12345678912 // TEL;CELL:12345678912 // ADR:山东济南齐鲁软件园 // ORG:济南 // TITLE:软件工程师 // URL:http://blog.csdn.net/lidew521 // NOTE:呼呼测试下吧。。。 // END:VCARD" //2.根据测试结果推理 //--------------------------------------- //测试结果不加回车是不行的这样的话会出现问题 //就是扫描出来以后会没有内容 //这里可以看出,微信解析二维码的方式 //------------------------------------------------- //3.测试\n可以被二维码识别 // 这里也是有原因的,因为微信扫描二维码后会进行二次加工, // 这里加工的时候,是用java代码的,因为是android系统,所以在 // java中的回车是\n,因此这里就要用\n来分割 String content = "BEGIN:VCARD\n" + "VERSION:3.0\n" + "N:李德伟\n" + "EMAIL:1606841559@qq.com\n" + "TEL:12345678912" + "TEL;CELL:12345678912" + "ADR:山东济南齐鲁软件园\n" + "ORG:" + "济南\n" + "TITLE:软件工程师\n" + "URL:http://blog.csdn.net/lidew521\n" + "NOTE:呼呼测试下吧。。。\n" + "END:VCARD"; String path = "D:/4S"; MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); Map hints = new HashMap(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 400, 400,hints); File file1 = new File(path,"名片.jpg"); MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1); } catch (Exception e) { e.printStackTrace(); } } } ----------------------------------------------------------------------- 3.搞定了这样就可以了 用微信扫描后,会自动出现保存页面,然后用户可以选择保存到通讯录中 ------------------------------------------------------------------ 4.分析: a.这里有些亲们可能以为,扫描出来是个页面,就以为二维码里存放了一个jsp类似的页面 其实这样想是错误的 b.很好证明,因为用微信或者qq可以把扫描的内容加到通讯录里,但是用普通的二维码扫描软件是不可以的 这就说明,其实二维码中存放的仅仅是一串被格式化了的数据而已,这段数据在上文中有提到 c.微信之所以能够扫描成联系人的格式,是因为微信内部做了处理,这里处理过程应该是这样的 首先微信会调用二维码api来解析二维码 d.其次微信会用解析出来的内容填充的实现准备好的jsp页面中,然后,在这个jsp页面中,就存在一段 可以跟微信程序中java方法,联系的js代码,这样就可以通过微信中的java方法,调用android系统的通讯录了 (这个部分说的可能不太清楚,android中js和java方法是可以相互调用传值的,大家可以学习下android,通讯录部分,也可以参考下 我以前写过的android教程)转载地址:https://credream.blog.csdn.net/article/details/24441825 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月23日 23时44分13秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C# WinForm窗体及其控件自适应各种屏幕分辨率
2019-04-30
winform中dataGridView的简单分页
2019-04-30
dataGridView几个小技巧
2019-04-30
RecyclerView Item 行高定义无效的BUG
2019-04-30
markdown发生HTML渲染组件出错的解决方案
2019-04-30
android ScrollView嵌套WebView高度为0的BUG
2019-04-30
android 混淆代码后 app 运行报错时, 如何精准定位报错位置
2019-04-30
android 定位并通过百度在线查询详细地址教程
2019-04-30
android TextView 首行缩进与部分文字改变颜色大小效果
2019-04-30
android app 优化启动体验, 不闪白屏并且快速展示 splash
2019-04-30
INSTALL_FAILED_NO_MATCHING_ABIS 解决方案
2019-04-30
android 把打好的 apk 包通过 adb 的方式安装到手机上
2019-04-30
区块链学习之路[持续更新]
2019-04-30
RecycleView-Java.lang.IllegalArgumentException: Called attach on a child which is not detached
2019-04-30
AI学习笔记 (一) 手写识别
2019-04-30
七牛云图片外链失效的解决办法
2019-04-30