1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 手放开 李圣杰
  4. 4 迷人的危险3(翻自 dance flow) FAFA
  5. 5 山楂树之恋 程佳佳
  6. 6 summertime cinnamons / evening cinema
  7. 7 不谓侠(Cover 萧忆情Alex) CRITTY
  8. 8 神武醉相思(翻自 优我女团) 双笙
  9. 9 空山新雨后 音阙诗听 / 锦零
  10. 10 Wonderful U (Demo Version) AGA
  11. 11 广寒宫 丸子呦
  12. 12 陪我看日出 回音哥
  13. 13 春夏秋冬的你 王宇良
  14. 14 世界が终わるまでは… WANDS
  15. 15 多想在平庸的生活拥抱你 隔壁老樊
  16. 16 千禧 徐秉龙
  17. 17 我的一个道姑朋友 双笙
  18. 18 大鱼  (Cover 周深) 双笙
  19. 19 霜雪千年(Cover 洛天依 / 乐正绫) 双笙 / 封茗囧菌
  20. 20 云烟成雨(翻自 房东的猫) 周玥
  21. 21 情深深雨濛濛 杨胖雨
  22. 22 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  23. 23 斑马斑马 房东的猫
  24. 24 See You Again Wiz Khalifa / Charlie Puth
  25. 25 Faded Alan Walker / Iselin Solheim
  26. 26 Natural J.Fla
  27. 27 New Soul Vox Angeli
  28. 28 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  29. 29 像鱼 王贰浪
  30. 30 Bye Bye Bye Lovestoned
  31. 31 Blame You 眠 / Lopu$
  32. 32 Believer J.Fla
  33. 33 书信 戴羽彤
  34. 34 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  35. 35 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  36. 36 慢慢喜欢你 LIve版(翻自 莫文蔚) 戴羽彤
  37. 37 病变(翻自 cubi) 戴羽彤
  38. 38 那女孩对我说 (完整版) Uu
  39. 39 绿色 陈雪凝
  40. 40 月牙湾 LIve版(翻自 F.I.R.) 戴羽彤
夜空中最亮的星(翻自 逃跑计划) - 戴羽彤
00:00 / 04:10

夜空中最亮的星 能否听清

那仰望的人 心底的孤独和叹息

夜空中最亮的星 能否记起

那曾与我同行 消失在风里的身影

我祈祷拥有一颗透明的心灵

和会流泪的眼睛

给我再去相信的勇气

越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请指引我靠近你

夜空中最亮的星 是否知道

那曾与我同行的身影 如今在哪里

夜空中最亮的星 是否在意

是等太阳先升起 还是意外先来临

我宁愿所有痛苦都留在心底

也不愿忘记你的眼睛

哦 给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行 哒~

我祈祷拥有一颗透明的心灵

和会流泪的眼睛 哦

给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行

2021.05.04 二维码生成与解析

提到二维码,想必大家都不会陌生,现如今它已经融入了我们生活的方方面面,从移动支付,到乘车码,再到健康码,现在连我们的电子社保卡、医保电子凭证也是基于二维码实现的,它的每一次应用都为我们的生活带来极大的便利性,可以说我们现在的生活越来越离不开它了,购物要扫码、看病就医购药要扫码、乘车要扫码,就连很多系统的登录也需要扫码,我们真的进入了有码时代……

1994年日本人原昌宏发明了二维码,因为其发明人主动放弃了申请专利,所以二维码不受知识产权保护,任何人都可以制作和使用它。虽然二维码诞生于日本,但得益于中国移动互联网的迅猛发展,它反而在中国市场上得到了最广泛的应用。

今天,我们就来看下,如何用java生成和解析二维码。

添加依赖

这里我们用的是google的一个开源库,第一个依赖是核心库,第二个是javase的依赖库,主要是用于二维码的解析。如果只是生成二维码的话,只需要引入核心库即可。

<!-- 添加 google 提供的二维码依赖 -->
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.0</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.3.0</version>
</dependency>

生成二维码

这里直接上代码,很简单。

 	/**
     * 生成二维码图片
     *
     * @param content 文本内容
     * @param fileSaveFullPath 文件保存路径
     * @throws Exception
     */
    public static void generateQrCodeImage(String content,
                                           String fileSaveFullPath) throws Exception {
    generateQrCodeImage(content, fileSaveFullPath, null);
    }
	
	/**
     * 
     * @param content
     * @param fileSaveFullPath
     * @param hints 参数配置
     * @throws Exception
     */
    public static void generateQrCodeImage(String content,
                                           String fileSaveFullPath, Map<EncodeHintType,Object> hints) throws Exception {
        BitMatrix bitMatrix = Objects.isNull(hints) ?
                qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 500, 500)
                :qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 500, 500, hints);
        System.out.println(bitMatrix);
        int onColor = 0xFFC02C38;
        // 背景色 白色
        int offColor = 0xFFFFFFFF;
        // 原生生成图片
        int width = bitMatrix.getWidth();
        int height = bitMatrix.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, bitMatrix.get(x, y) ? onColor : offColor);
            }
        }
        // 生成二维码图片
        ImageIO.write(image, "png", new File(fileSaveFullPath));
    }

你如果还依赖了javase的包的话,上面生成的生成方法会更简单:

/**
     * 
     * @param content
     * @param fileSaveFullPath
     * @param hints 参数配置
     * @throws Exception
     */
    public static void generateQrCodeImage(String content,
                                           String fileSaveFullPath, Map<EncodeHintType,Object> hints) throws Exception {
        BitMatrix bitMatrix = Objects.isNull(hints) ?
                qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 500, 500)
                :qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 500, 500, hints);
        System.out.println(bitMatrix);
        Path path = new File(fileSaveFullPath).toPath();
        // 前景色 玉红色
        int onColor = 0xFF1661AB;
        // 背景色 白色
        int offColor = 0xFFFFFFFF;
        MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(onColor, offColor);                       MatrixToImageWriter.writeToPath(bitMatrix, "png", path, matrixToImageConfig);
    }

两个方法唯一的区别是,后一个方法依赖javase,在javase的包中提供了MatrixToImageWriter.writeToPath()方法,可以直接把生成的矩阵(BitMatrix)转成图片;而第一个方法,参考了这个方法内容,所以显得更长,但是省掉了一个包(在大型企业项目中为避免包冲突,尽可能少加依赖)。

注意事项

这里有几点需要说明下:

  • encode:需要指定二维码的宽和高,这里我给的500(单位都是像素),可以根据需要调整
  • Map<EncodeHintType,Object>:就是一些配置信息,这里我只是配置了字符编码,其他配置信息可以去看下系统源码,mapkey只能是EncodeHintType的类型
  • onColoroffColor分别表示前景色和背景色,颜色值为16进制(Hex),可以根据自己的需要进行修改。

其他的,都很简单,看下源码应该问题不大。

生成效果

效果还是很不错的,二维码的内容是

name : 云中志\n content : hello qrCode\n date : 2021-05-04\n url : https://www.cnblogs.com/caoleiCoding/

扫码效果

扫码之后就显示内容了

解析二维码

前面我们说了,解析要依赖javase的包,其他的就没啥了,比生成更简单。

public static void readQrCodeImage() throws Exception {
        Properties properties = System.getProperties();
        properties.list(System.out);
        FileInputStream fileInputStream = new FileInputStream("d://testQrCode1.png");
        BufferedImage readImage = ImageIO.read(fileInputStream);
        BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(readImage);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
        Result decode = qrCodeReader.decode(bitmap);
        System.out.println(decode);
    }

解析结果和我们刚才扫码结果一样:

我这里报错是因为生成图片的工具类(javase依赖的一个第三方包)获取JDK版本号报错了,我是open jDk9,版本号是9,但是包里面的,必须得是1.x才能被截取,这个错我也改不了,也懒得更换JDK版本,下面是包里面的源码:

各位小伙伴在写代码的时候,一定要尽可能规范,避免出现这种潜在的运行时错误,提取字符串后、数值转换前一定要有逻辑判断。

总结

今天讲了两个应用比较广泛的场景——生成二维码和解析二维码,掌握了这两个技术实现,简单的扫码登录,你应该可以简单实现了,说一个我的实现思路,可以在移动端调用相机拍照(h5调用很简单,哪天试一下),前端可以直接解析二维码并进行相关业务操作,也可以把图片传给后端解析,然后进相关相关业务,验证通过后,将移动端的access_token复制一份返回给web端,扫码登录就实现了。好了,今天的Example就到这里吧。

项目路径:

https://github.com/Syske/example-everyday

本项目会每日更新,让我们一起学习,一起进步,遇见更好的自己,加油呀

posted @ 2021-05-04 19:18  云中志  阅读(216)  评论(0编辑  收藏  举报