python实现电子二维码文本存储压缩,解决因摄像头分辨率不足导致二维码无法读取的问题。
可以取消将信息存至服务器的过程而直接本地解码读取信息。
编码:(将二维码压缩为酥糖码的过程,以存储文本信息举例)
每统计至128+n字节分一层(即16个汉字或128个字母数字与标点)
记录二维码最大层数至位置文本文件
增加n个空字节防止因强行分割而出错。
生成第一层二维码,
记录第一层二维码色块位置信息至临时数据文本文件,
黑色块标记为1,白色块标记为0。
则第一层标有1的色块读取的二进制数据为1,
标有0的色块读取的二进制数据为0,
记录需要乘法运算和减法运算时色块的位置至数据文本文件
生成第二层二维码,如在第一层黑色块上叠加黑色块标记为1+1,
白色块叠加黑色块标记为0+1X2,白色叠加白色标记为0+0,
黑色块上叠加白色快标记为1 - (2-1)
则第二层标有2的色块读取的二进制数据为1,
标有0的色块读取的二进制数据为0,
删除在临时数据文本文件中第一层二维码色块位置信息,
记录第二层二维码色块位置信息至临时数据文本文件,
记录需要乘法运算和减法运算时色块的位置至数据文本文件
生成第三层二维码,如在第二层黑色块上叠加黑色块标记为2+1,
白色块叠加黑色块标记为0+1X3,白色叠加白色标记为0+0
黑色块上叠加白色快标记为2- (3-1)
则第三层标有3的色块读取的二进制数据为1,
标有0的色块读取的二进制数据为0,
删除在临时数据文本文件中第二层二维码色块位置信息,
记录第三层二维码色块位置信息至临时数据文本文件,
记录需要乘法运算和减法运算时色块的位置至数据文本文件
......
生成第n层二维码,如在第n-1层黑色块上叠加黑色块标记为(n-1)+1,
白色块叠加黑色块标记为0+1Xn,白色叠加白色标记为0+0
黑色块上叠加白色快标记为n-1- (n-1)
则第n层标有的n色块读取的二进制数据为1,
标有0的色块读取的二进制数据为0,
删除在临时数据文本文件中第n-1层二维码色块位置信息,
记录第n层二维码色块位置信息至临时数据文本文件,
记录需要乘法运算和减法运算时色块的位置至数据文本文件
解码:(解压酥糖码的过程)
将合成二维码中黑色色块标记为n,白色色块标记为0.
第n层
根据位置文本文件
查找第n层标记时进行乘法运算的色块。
查找第n层标记时进行减法运算的色块。
标有0和进行减法运算的色块读取的二进制数据为0,
其他色块为1.
产生第n层二维码色块相对位置信息并存至临时数据文本文件
读取第n层数据并存至结果文本文件,
删除临时数据文本文件中第n层二维码色块相对位置信息
将没有标记为0的色块数值减1,
再将第n层进行乘法运算的色块再减1,更新位置信息
第n-1层
根据位置文本文件
查找第n-1层标记时进行乘法运算的色块。
查找第n-1层标记时进行减法运算的色块。
标有0和进行减法运算的色块读取的二进制数据为0,
其他色块为1.
产生第n-1层二维码色块相对位置信息并存至临时数据文本文件
读取第n-1层数据并存至结果文本文件,
清空临时数据文件
删除临时数据文本文件中第n-1层二维码色块相对位置信息
将没有标记为0的色块数值减1,
再将第n-1层进行乘法运算的色块再减1,更新位置信息
......
第1层
查找第1层标记时进行乘法运算的色块。
查找第1层标记时进行减法运算的色块。
标有0和进行减法运算的色块读取的二进制数据为0,
其他色块为1.
读取第1层数据并存至结果文本文件,
将没有标记为0的色块数值减1,
再将第1层进行乘法运算的色块更改为减1,(第一层并没进行过乘法运算)
对结果文本文件进行重新排版处理
相关解释:
读取:
根据位置信息产生第n层二维码生成并将二维码内内容存至结果文本文件后
再将第n层二维码图片删除。
相关思路
如何对结果文本文件重新排版:
将第n层整体信息添加序号为n
...
根据序号从1至n排版。
如何判断压缩到达第n层:
根据位置文本文件中的最大层数判断。
如何判断解压到达第一层:
根据位置文本文件确认该层位置信息没有进行过任何乘法运算或进行减法运算后结果为零时
该层为第一层。
如何加密信息:
根据 加密条件 重新排序位置信息,只有用户使用时向软件提供 正确的特定条件 重新排序位置信息,才会正确解读数据。
该方法用于进行大量文本存储时会显现优势,如文本较少时虽然图片文件大小相当
但会捆绑一个额外的位置文本文件,
图解