二维码相关---java生成二维码名片,而且自己主动保存到手机通讯录中...
版权声明:本文为博主原创文章,未经博主credreamer 同意不得转载 违者追究法律责任。
https://blog.csdn.net/lidew521/article/details/24441825
二维码相关---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:软件project师
// 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:软件project师\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教程)
二维码相关---java生成二维码名片,而且自己主动保存到手机通讯录中...的更多相关文章
- 二维码相关---java生成二维码名片,并且自动保存到手机通讯录中...
http://blog.csdn.net/lidew521/article/details/24441825
- 利用JAVA生成二维码
本文章整理于慕课网的学习视频<JAVA生成二维码>,如果想看视频内容请移步慕课网. 维基百科上对于二维码的解释. 二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图 ...
- java 生成二维码、可带LOGO、可去白边
1.准备工作 所需jar包: JDK 1.6: commons-codec-1.11.jar core-2.2.jar javase-2.2.jar JDK 1.7: commons-codec- ...
- java 生成二维码后叠加LOGO并转换成base64
1.代码 见文末推荐 2.测试 测试1:生成base64码 public static void main(String[] args) throws Exception { String dat ...
- java生成二维码的几个方法
1: 使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode/ ...
- 如何使用 Java 生成二维码
步骤 下载jar包(QRCode.jar) maven项目手动引入jar包 编写实体类实现二维码的生成 controller调用 下载jar包(QRCode.jar) 下载网址如下: QRCode生成 ...
- java生成二维码打印到浏览器
java生成二维码打印到浏览器 解决方法: pom.xml的依赖两个jar包: <!-- https://mvnrepository.com/artifact/com.google.zxin ...
- java生成二维码的几种方式
1: 使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode/ ...
- (二)一起学 Java Collections Framework 源码之 AbstractCollection
. . . . . 目录 (一)一起学 Java Collections Framework 源码之 概述(未完成) (二)一起学 Java Collections Framework 源码之 Abs ...
随机推荐
- XMPP即时通讯协议使用(三)——订阅发布、断开重连与Ping
package com.testV3; import java.util.List; import org.jivesoftware.smack.ConnectionListener; import ...
- django允许外部访问 项目后台不挂断运行
1关闭防火墙 1 service iptables stop 2设置django 1 2 3 4 5 6 7 8 9 10 11 开开启django时,使用0.0.0.0:xxxx,作为ip和端口例如 ...
- 五 shell 变量与字符串操作
特点:1 shell变量没有数据类型的区分 2 Shell 把任何存储在变量中的值,皆视为以字符组成的“字符串”. 3 设定的变量值只在当前shell环境中有作用 4 不能以数字开头 ...
- HDU-5378 概率DP
题意:给定一棵有n个节点的树,现在要给节点附1~n的权值(各节点权值不能相同),一棵子树的领袖就是子树中权值最大的节点,问有多少种分配方案使得最后有恰好K个领袖. 解法:这道题一看以为是树上的计数问题 ...
- Codeforces Round #518 (Div. 1) Computer Game 倍增+矩阵快速幂
接近于死亡的选手没有水平更博客,所以现在每五个月更一篇. 这道题呢,首先如果已经有权限升级了,那么后面肯定全部选的是 \(p_ib_i\) 最高的. 设这个值为 \(M=\max \limits_i ...
- [BZOJ3625][Codeforces Round #250]小朋友和二叉树 多项式开根+求逆
https://www.lydsy.com/JudgeOnline/problem.php?id=3625 愉快地列式子.设\(F[i]\)表示权值为\(i\) 的子树的方案数,\(A[i]\)为\( ...
- golang-练习2
反转字符串 package main import "fmt" func FirstReverse(str string) string { var str1 []rune run ...
- Static Fields and Methods
If you define a field as static, then there is only one such field per class. In contrast, each obje ...
- [Java复习] 微服务
1. 怎么样定义一个微服务,或划分服务比较合理?业务导向的共性? 对应服务拆分,先设计高内聚低耦合的领域模型(DD),再实现相应的分布式系统是一种比较合理的方式. 微服务是手段,不是目的.目的是为了让 ...
- cocos2D-X 打包
{ //首先有java jdk,android sdk,android ndk //用android studio import //匹配gradle 的版本 有些gradle可能下载不下来,不用慌 ...