​​​​​哔哩哔哩 (゜-゜)つロ 干杯~-bilibilihttps://www.bilibili.com/​​

我们可以实现图片二维码转换为网址,或者将网址转换为伪二维码(与普通二维码有区别,因为没有定位点,转换成的二维码只包含信息)。

一、网址转换为二维码

1、实现原理:

我们把网址看成一串字符串,对字符串进行操作。将字符串每个字符转换成整数之后,每个整数可以用二进制来表示,二进制又由0和1来表示,0表示黑色,1表示白色,再在绘图界面上将每一个黑白像素点扩大成小矩形绘制出来,得到上述图片。

2、实现步骤:

①字符串转为为二进制码

我们把网址看成一串字符串,对字符串进行操作。

a.字符串转为整数  b.整数转二进制码
我们用一个方法来实现

StringtoBiarray(),返回一个字符串数组,储存着二进制码的信息
public String[] StringtoBiarray(){String str = "https://bilibili.com";String []binaryStrar = new String [str.length()];// 取出单个的字符for (int i = 0; i < str.length(); i++) {//将不规则的字符串转为整数char strtoBiary=  str.charAt(i);//用int类型吸收char类型int biary=strtoBiary;//将整数转为二进制String binaryStr=Integer.toBinaryString(biary);//将二进制补为8位,前面补零while(binaryStr.length()<8) {binaryStr = 0 + binaryStr;}System.out.println(binaryStr);//将二进制码存储入数组binaryStrar[i]=binaryStr;}return binaryStrar;}

如果将其输出,即为下列结果

②根据二进制码的顺序: 0绘制一个白块 1绘制一个黑块

a.绘制窗体

绘制窗体的方法,在我的另一篇中有详细介绍【java创建能够画直线的窗口界面】_ZERO_HOPE的博客-CSDN博客_java 窗口画线

此处采用继承JFrame的方式,构造函数来绘制窗体。重写paint 方法,将绘制的图像加载在窗体上。

public class QRCodeUI extends JFrame {

1)创建储存二进制信息的数组

String []binaryStrArray = {};

2)构造方法

public QRCodeUI(){setTitle("二维码图片");setSize(900,800);setDefaultCloseOperation(3);setVisible(true);}

3)主函数方法

public static void main(String[] args) {QRCodeUI qrCodeUI = new QRCodeUI();QRCode qrCode = new QRCode();//创建对象后,调用方法qrCodeUI.binaryStrArray = qrCode.StringtoBiarray();}

4)paint方法

public void paint(Graphics g) {super.paint(g);//绘制图形for (int i = 0; i < binaryStrArray.length; i++) {String str = binaryStrArray[i];for (int j = 0; j < str.length(); j++) {//注意i和jchar c = str.charAt(j);if(c=='0'){g.setColor(Color.white);}else{g.setColor(Color.black);}g.fillRect(50+i*30,50+j*30,30,30);//每个小矩形位置变化,长宽30}}}

3、完整代码

①、第一个类QRCodeUI

public class QRCodeUI extends JFrame {String []binaryStrArray = {};public QRCodeUI(){setTitle("二维码图片");setSize(900,800);setDefaultCloseOperation(3);setVisible(true);}public static void main(String[] args) {QRCodeUI qrCodeUI = new QRCodeUI();QRCode qrCode = new QRCode();qrCodeUI.binaryStrArray = qrCode.StringtoBiarray();}@Overridepublic void paint(Graphics g) {super.paint(g);for (int i = 0; i < binaryStrArray.length; i++) {String str = binaryStrArray[i];for (int j = 0; j < str.length(); j++) {//注意i和jchar c = str.charAt(j);if(c=='0'){g.setColor(Color.white);}else{g.setColor(Color.black);}g.fillRect(50+i*30,50+j*30,30,30);}}}
}

②、第二个类

public class QRCode {//    String str;
//    String []binaryStrarr = new String [str.length()];public String[] StringtoBiarray(){String str = "https://bilibili.com";String []binaryStrar = new String [str.length()];// 取出单个的字符for (int i = 0; i < str.length(); i++) {//将不规则的字符串转为整数char strtoBiary=  str.charAt(i);//用int类型吸收char类型int biary=strtoBiary;//将整数转为二进制String binaryStr=Integer.toBinaryString(biary);//将二进制补为8位,前面补零while(binaryStr.length()<8) {binaryStr = 0 + binaryStr;}System.out.println(binaryStr);//将二进制码存储入数组binaryStrar[i]=binaryStr;}return binaryStrar;}

三、二维码转换为网址

1、实现原理:与上面相反。识别图片后,获取每一个黑白块信息,每个黑白块是0或1,所以每一列的黑白块组成一串二进制编码。(而"https://bilibili.com"这个字符串有20个字符,便说明有20串二进制编码。)再由二进制码转换为整型,最后再转化为字符型输出,即可得到网址。

2、实现步骤:

①先将二维码图片存放在文件夹中,然后在构造函数中,用String获取图片路径,以此获取图片文件。

②将图片传给缓冲图片对象,对缓冲图片对象进行操作,获取图像宽w高h。

③创建一个图像二维数组储存图像信息,用w除以20,得到每个方块的宽度width。

④在for循环中,创建一个字符串str来储存二进制编码。从每一个方块的中心取像素点,得到白色或黑色,创建整型rgb储存得到的像素值,通过像素值创建像素对象,用于灰度判断黑色白色,如果大于125,则是黑色,在字符串后添0,白色则添1。

⑤一次循环后,将字符串str转化为int型,再将int 型强制转化为(char)型,输出字符。

int i1 = Integer.parseInt(str, 2);  //传入str,2代表二进制编码方式System.out.print((char)i1);    //输出完整网址

每循环一次,得到一个字符,循环结束后,打印出网址。

3、完整代码

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class QRCode {int [][]arr={};public QRCode(){String imagPath="C:\\Desktop\\picture\\test.png";    //存放图片路径arr=getImagePixArray(imagPath);}public int[][] getImagePixArray(String path) {File file=new File(path);//缓冲图片对象BufferedImage buffimg=null;try {//读取文件给缓冲图buffimg = ImageIO.read(file);}catch(IOException e){e.printStackTrace();}// 获取图片尺寸int w=buffimg.getWidth();int h=buffimg.getHeight();int [][] imgarr=new int[w][h];int width=w/20;for(int i=width/2;i<w;i+=width) {String str="";for(int j=width/2;j<8*width;j+=width) {int rgb=buffimg.getRGB(i,j);Color color = new Color (rgb);int gray = ((color.getRed()+color.getGreen()+color.getGreen())/3);if (gray>125){str+="0";}else {str+="1";}}int i1 = Integer.parseInt(str, 2);System.out.println(str+ " --- "+(char)+i1);}return imgarr;}public static void main(String[] args) {new QRCode();    //创建一个对象即会调用构造函数,运行代码}}

【java实现网址转换为二维码】相关推荐

  1. Chrome扩展学习Demo(三):将浏览器地址栏的网址转换为二维码

    场景:将当前地址栏网址转换为二维码 效果图: 代码截图: manifest.json {"manifest_version": 2,"name": " ...

  2. VUE将网址转换为二维码

    一.安装 npm install qrcodejs2 --save 二.引入 import QRCode from 'qrcodejs2'export default {components: {QR ...

  3. java生成以及解析二维码

    java生成以及解析二维码 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 ...

  4. Java常见应用——Json,二维码生成,加密解密应用

    Java常见应用--Json,二维码生成,加密解密应用 一.JSON 1.下载json架包,json官网:json.org 2.将Map/JavaBean/String转化成json对象,只需要使用J ...

  5. Java:Java编程实现导出二维码

    Java:Java编程实现导出二维码 目录 输出结果 代码设计 输出结果 更新-- 代码设计 public class QRCodeUtil {private static final String ...

  6. Java连接打印机打印二维码

    首先导入依赖 implementation 'com.google.zxing:core:3.5.1' implementation 'com.google.zxing:javase:3.5.1' 1 ...

  7. 如何把公司网址生成二维码

    公司网址生成二维码对于有些小伙伴来说可能感觉非常简单,但是也可能有的小伙伴是没有接触过,不知道如何把网址生成二维码,今天小编就给大家简单介绍下,如何利用二维码生成器把公司网址生成二维码. 打开二维码生 ...

  8. java根据内容生成二维码

    java根据内容生成二维码 一.首先导入jar包:google.zxing.jar jar包可以从maven网站下载:meven仓库 这里可以找到你想要的绝大多数jar包,可以是依赖,也可以是jar包 ...

  9. java利用zxing生成二维码

    什么是ZXing? ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库. 利用ZXing这个工具库来生成二维码,具体操作如下: 引入相关资源包 <dependency&g ...

最新文章

  1. 修改eclipse启动时eclipse使用的jre
  2. css expressionr,CSS自定义属性expression_r
  3. 《剑指offer》替换空格
  4. ad file type not recognised_Java实用工具类:File工具类方法学习,可创建目录及文件...
  5. 一个封装比较完整的FTP类——clsFTP
  6. pytorch 数据类型
  7. andriod studio在缩小图片_画图教室|有哪些办法可以有效缩小作品集的pdf文件大小?...
  8. EL表达式取Map,List值的总结
  9. java_db常见错误总结
  10. 最近一段时间的手工作品
  11. 总结这周学习的css的知识
  12. 阿里巴巴Java开发文档2020版学习-日期时间
  13. 系统管理员设置了系统策略禁止进行此安装怎么解决
  14. 解决pdf.js下载PDF文件名称中文乱码和不带.pdf后缀名问题
  15. BISTML-CRF项目源码
  16. 使用 Win32 API 枚举应用程序
  17. SOA、RMI、RPC、Rest、RestFul、Soap、WebService 详解
  18. 韩国官员提议加强对加密货币监管的全球合作
  19. Vue的生命周期钩子函数介绍
  20. 60 种数据图表,制作工具和使用场景(建议收藏)

热门文章

  1. 【opencv-c++】cv::imread函数读取图像
  2. npm 安装模块报node-gyp ERR!
  3. 国内十大精准的现货黄金价格走势图软件最新排名(综合版)
  4. WMS仓库管理系统---(22)补货管理之补货上架
  5. 英语单词学习 - 记忆版(English Vocabulary):Clothes Vocabulary:List of Clothes and Accessories in English
  6. 强制去除输入信号超出范围
  7. 1.渗透测试学习——介绍
  8. SDH复杂组网之配置SNCP与SNCP相交-01
  9. 陌陌越来越赚钱,但它还不是移动版YY
  10. 简单的收支记账软件(没有IO流)