平时使用了那么多的二维码,今天我们自己做一个二维码。今天刚安装了IDEA,学会了用法,就来通过IDEA做一个生成二维码的程序。
首先新建一个项目
设置项目名称
点击Next之后,出现下图所示页面:
这里要注意,都是默认的就行(但是记住框出的文件目录,之后会有用 ),然后Finish完成项目创建。项目创建成功之后是要下载 jar 包到项目中的,但是,默认的下载路径是一个国外的下载网站,会比减慢,所以要配置下载路径,这时候就需要刚才的目录了,在刚才的目录下放入settings.xml,文件下载参考https://download.csdn.net/download/m0_53197131/20337849。文件放入如图目录实例:
放入文件之后,在进入IDEA,等待下载完成就行了。
那么问题来了,如果下载失败怎么办呢?
下载失败没事,一般添加配置文件更改下载地址之后第一次容易出错,以后就不会了。鼠标放到项目名称上,右键 ---- Open In ---- Explorer ---- 选中创建的项目删掉,然后关闭IDEA再重新进入,按照上边的过程再建立一个项目就可以了。第一次已经添加过,这时候并不需要再次添加配置文件,等待下载即可,下载完成后的界面如图:
然后打开项目下的pom.xml文件,添加如下配置:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.3</version>
</dependency>
保存文件,然后点击右上角的图标再次下载jar包,等待下载完成。
然后就是开始创建java类,导包之类的了。
创建java类的步骤就不多做描述了,新建Javaclass类Code,直接上图
然后就是在Code 文件中写java代码了,先上代码:
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageConfig;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.CharacterSetECI;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
/**
* QRCode工具类
*
* @author: GaoHuanjie
*/
public class Code {
/**
* 生成二维码
*
* @author GaoHuanjie
*
*/
public static boolean createQRCode(String content, int width, int height, int margin, String filePath,
String fileName, String formatName) throws Exception {
if (content == null || content.equals("")) {
throw new Exception("二维码内容不能为空。");
}
// 二维码基本参数设置
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, CharacterSetECI.UTF8);// 设置编码字符集utf-8
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);// 设置纠错等级L/M/Q/H,当二维码被损毁一部分时,纠错等级越高,越可能读取成功;同样的,纠错等级越高,单位面积内点阵的点越多,机器扫描时,识别所需时间越长,当前设置等级为最高等级H
hints.put(EncodeHintType.MARGIN, margin);// 可设置范围为0-10,但仅四个变化0 1(2) 3(4 5 6) 7(8 9 10)
// 生成图片类型为QRCode
BarcodeFormat format = BarcodeFormat.QR_CODE;
// 创建位矩阵对象
BitMatrix matrix = null;
try {
// 生成二维码对应的位矩阵对象
matrix = new MultiFormatWriter().encode(content, format, width, height, hints);
} catch (WriterException e) {
e.printStackTrace();
}
// 设置位矩阵转图片的参数
MatrixToImageConfig config = new MatrixToImageConfig(Color.black.getRGB(), Color.white.getRGB());
// 位矩阵对象转BufferedImage对象
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(matrix, config);
// 判断路径是否存在,不存在则创建
File path = new File(filePath);
if (!path.exists()) {
path.mkdirs();
}
// 路径后补充斜杠
if (filePath.lastIndexOf("\\") != filePath.length() - 1) {
filePath = filePath + "\\";
}
// 二维码全路径
filePath = filePath + fileName + "." + formatName;
try {
// 输出图片文件到指定位置
return ImageIO.write(bufferedImage, formatName, new File(filePath));
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
String content = "https://image.baidu.com/search/detail?ct=503316480&z=&tn=baiduimagedetail&ipn=d&word=%E5%A3%81%E7%BA%B8&step_word=&ie=utf-8&in=&cl=2&lm=-1&st=-1&hd=undefined&latest=undefined©right=undefined&cs=2544377084,275372641&os=3052229399,834441112&simid=3533086814,586585425&pn=59&rn=1&di=72930&ln=3476&fr=&fmq=1526269427171_R&fm=&ic=0&s=undefined&se=&sme=&tab=0&width=&height=&face=undefined&is=0,0&istype=2&ist=&jit=&bdtype=0&spn=0&pi=0&gsm=0&objurl=https%3A%2F%2Fss0.baidu.com%2F-Po3dSag_xI4khGko9WTAnF6hhy%2Fzhidao%2Fpic%2Fitem%2F0e2442a7d933c895ca486665d51373f0820200fd.jpg&rpstart=0&rpnum=0&adpicid=0&nojc=undefined";//二维码内容
int width = 888;//二维码宽度
int height = 888;//二维码高度
int margin = 3;//二维码边距
String filePath = "D:\\";//二维码保存路径
String fileName = "高清壁纸,你值得拥有!";//二维码文件名
String formatName = "jpg";//二维码图片格式
try {
// 生成二维码
if(createQRCode(content, width, height,margin,filePath, fileName, formatName)) {
System.out.println("Yes");
return;
}
System.out.println("No");
} catch (Exception e) {
e.printStackTrace();
}
}
}
可以自己更改主函数的链接,可以改成网页链接或是网图都可以:
String content = "https://image.baidu.com/search/detail?ct=503316480&z=&tn=baiduimagedetail&ipn=d&word=%E5%A3%81%E7%BA%B8&step_word=&ie=utf-8&in=&cl=2&lm=-1&st=-1&hd=undefined&latest=undefined©right=undefined&cs=2544377084,275372641&os=3052229399,834441112&simid=3533086814,586585425&pn=59&rn=1&di=72930&ln=3476&fr=&fmq=1526269427171_R&fm=&ic=0&s=undefined&se=&sme=&tab=0&width=&height=&face=undefined&is=0,0&istype=2&ist=&jit=&bdtype=0&spn=0&pi=0&gsm=0&objurl=https%3A%2F%2Fss0.baidu.com%2F-Po3dSag_xI4khGko9WTAnF6hhy%2Fzhidao%2Fpic%2Fitem%2F0e2442a7d933c895ca486665d51373f0820200fd.jpg&rpstart=0&rpnum=0&adpicid=0&nojc=undefined";//二维码内容
也可以改二维码文件的位置这里我设置的是D盘根目录:
String filePath = "D:\\";//二维码保存路径
还可以改二维码的名字与图片格式:
String fileName = "高清壁纸,你值得拥有!";//二维码文件名
String formatName = "jpg";//二维码图片格式
有些同学这时候会出现错误,这是因为下载的包没有加载到文件中,这时候刷新就可以。
按照图中的步骤,双击clean和compile就可以了。
右键 ---- Run 运行,之后就可以在D盘根目录下看到生成的二维码了。
生成的二维码如图:
之后就可以用手机扫描二维码,可以看到链接的内容。学会了就去试试吧