简述
二维码相信大家肯定再熟悉不过了!扫码支付转账、扫码下载应用程序、扫码关注公众号、扫码取电影票等许许多多的动作可以通过二维码来实现。作为一个程序员肯定不免和二维码打交道,这边我就把使用二维码开发的方法做一个总结,也使得自己下次有迹可循!
什么是二维码
官方解释
二维码(2-dimensional bar code) ,又称二维条码, 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理: 二维条码/二维码能够在横向和纵向两个方位同时表达信息,因此能在很小的面积内表达大量的信息。
我的解释
看完官方的解释不忍打了个寒噤,有点不明觉厉。给出我的非官方大白话介绍:二维码就是一个可以用来存储信息(网址、名片、文本信息、特定代码)的图片,通过特定的设备或者是程序我们可以从这个二维码中获得他想要表达的信息。相对于他的前代条形码而言可以存储更为复杂的信息(看到有的二维码密密麻麻的那说明他所要表达的内容也较为复杂)。
如果再简单点说:对于大多数二维码来讲是用来存储一个文本信息,下面我就分别说明下java和.Net中怎么生成二维码!
Java中生成二维码
在java中生成二维码的方法有不少。比如说SwetakeQRCode、BarCode4j、Zxing等等。这里我要介绍使用的是通过zxing(谷歌)来将字符串转化成二维码!
/**
* 将字符串转化成二维码
* */
public static String encodeQrcode(String content) {
if (StringUtils.isBlank(content))
return null;
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
//二维码生成参数
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 设置字符集编码类型
BitMatrix bitMatrix = null;
try {
// 参数顺序分别为:编码内容,编码类型,生成图片宽度,生成图片高度,设置参数
bitMatrix = multiFormatWriter.encode(content,BarcodeFormat.QR_CODE, 300, 300, hints);
BufferedImage image = toBufferedImage(bitMatrix);
// 输出二维码图片流
try {
//文件存储路径
String url = URLDecoder.decode("e:/","UTF-8");
//要保存的文件名
String filename = StringUtil.getUUID();
File file1 = new File(url+"ewm/", filename + ".jpg");
// 写入文件
if(!ImageIO.write(image, "jpg", file1))
{
throw new IOException("Could not write an image of format jpg to " + file1);
}
return filename + ".jpg";
} catch (IOException e) {
e.printStackTrace();
}
} catch (WriterException e1) {
e1.printStackTrace();
}
return null;
}
/***
* 转化成图片缓存
* @param matrix
* @return
*/
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;
}
- 代码中的 hints,为生成二维码时的一些参数(纠错级别,编码等)设置,键值对存储类型
- MultiFormatWriter核心成员将字符串转化成二维码矩阵,toBufferedImage只是将二维码矩阵输出到图片上面。
.Net中生成二维码
上面讲了在Java中怎么生成二维码,.Net中我也碰到过需要二维码来展示相关内容,所以一起分享下使用的方法!.Net平台下也有一个zxing.dll用于帮助我们将字符串转化成我们需要的二维码,代码如下:
/// <summary>
/// 将字符串转化成二维码
/// hjf
/// </summary>
/// <param name="str">待转化的字符串</param>
public FileContentResult GetEWMByStr(string str)
{
if (string.IsNullOrEmpty(str))
{
return null;
}
//二维码配置参数
EncodingOptions options = null;
//输出
BarcodeWriter writer = null;
options = new QrCodeEncodingOptions
{
DisableECI = true,
CharacterSet = "UTF-8",
Width = 100,
Height = 100
};
writer = new BarcodeWriter();
//格式化类型 二维码
writer.Format = BarcodeFormat.QR_CODE;
writer.Options = options;
//将字符串转化成bitmap二维码
Bitmap bmp = writer.Write(str);
//输出文件流
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
bmp.Dispose();
return File(ms.ToArray(), "image/jpeg");
}
- options为二维码配置参数,配置编码、长、宽、是否禁用ECI编码段等。
- BarcodeFormat定义需要转化的类型格式,可以通过这边设置哦解析成二维码还是条形码。
- 上面实例是.Net Mvc版本的代码,Asp.net大同小异,最后的输出部分改下即可!
资源下载
暂无
小结
经过上面的探索遇到像微信或是支付宝的扫码支付的时候相信大家就不会那么束手无策了吧。知识需要靠我们慢慢积累,点滴的成长才会快乐!
谢谢大家的支持,转载请注明出处!