python 二维码

文章目录


# coding=utf-8
import os
import sys

import qrcode
import base64


def_unit_len = 2330


def base64_file(src_file_path=''):
    s_file = open(src_file_path, "rb").read()
    encode_str = base64.b64encode(s_file)
    res_str = str(encode_str, "utf-8")
    return res_str


def len_split(text_sum_len=1, unit_len=def_unit_len) -> list:
    r"""
    将文本总长度根据 unit_len 切成下标数组
    :param text_sum_len: 文本总长度
    :param unit_len: 单位长度;每个文本片段的长度
    :return: list
    """
    result_list = []
    count = int(text_sum_len / unit_len)
    if text_sum_len % unit_len != 0:
        count += 1
    for i in range(0, count):
        current_idx = i * unit_len
        result_list.append(current_idx)
    return result_list


def text_split_make_img(text=''):
    r"""
    文本拆分
    :return:
    """
    unit_len = def_unit_len
    text_len = len(text)
    print(text_len)
    len_arr = len_split(text_len, )
    print(len_arr)
    for i in len_arr:
        print(i)
        if i + unit_len <= text_len:
            tmp_txt = text[i: i + unit_len]
        else:
            tmp_txt = text[i:]

        print(tmp_txt)
        img = qrcode.make(tmp_txt)
        img.save(fr'{qr_code_dir}/{i}.png')


def is_blank(text: str) -> bool:
    if text is None:
        return True
    if len(text) <= 0:
        return True
    return False


sys_argv = sys.argv[1:]
qr_code_dir = r'P:/workspace/qr_code_dir/' if len(sys_argv) <= 0 or is_blank(sys_argv[1]) else sys_argv[1]
path_prefix = r'P:/workspace/pycharm_u/res/'

zip_file = path_prefix + 'pack.zip' if len(sys_argv) <= 0 or is_blank(sys_argv[0]) else sys_argv[0]

if __name__ == '__main__':
    print(fr'use like: file_qrcode $zip_file $qr_code_dir ')
    print(fr'example : file_qrcode "P:/workspace/pack.zip" "P:/workspace/qr_code_dir/" ')
    print(fr'default : zip_file="P:/workspace/pack.zip" ; qr_code_dir="P:/workspace/qr_code_dir/" ')
    print(fr'---------------------------------------------------- ')
    print(fr'==>> zip_file=[{zip_file}]')
    print(fr'==>> qr_code_dir=[{qr_code_dir}]')
    text_str = base64_file(zip_file)
    # text_str = "/^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*)(?:\.
    # (?:0|[1-9]\d*|\d*[a-zA-Z-][a-zA-Z0-9-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/"
    text_split_make_img(text_str)
    open_target_dir = qr_code_dir.replace('/', '\\')
    os.system(rf"start explorer {open_target_dir}")

  • src_shot.py
# coding=utf-8

from PIL import ImageGrab
from uiautomation import uiautomation as uia


def shot(idx=0):
    # im = ImageGrab.grab()
    # bbox=(x1,y1, x2,y2)
    im = ImageGrab.grab(bbox=(963, 28, 1908, 982))
    im.save(rf'D:/workspace/qr_code_dir/src_png/shot_{idx}.png')


count = 3
x = 1485
y = 995


def main():
    uia.Click(x, y, 1)
    for i in range(0, count):
        shot(i)
        uia.Click(x, y, 1)
        print(f'==>>: idx={i}')


if __name__ == '__main__':
    main()

  • qr_cv
import os
import sys

import cv2 as cv
import pyzbar.pyzbar as pyzbar
from pyzbar import pyzbar as pyzbar
from PIL import Image, ImageEnhance
import date_util as date_util
import base64_file as base64_file
from os import listdir,system


def decode_display(image):
    barcodes = pyzbar.decode(image)
    for barcode in barcodes:
        # 提取二维码的边界框的位置
        # 画出图像中条形码的边界框
        (x, y, w, h) = barcode.rect
        cv.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)

        # 提取二维码数据为字节对象,所以如果我们想在输出图像上
        # 画出来,就需要先将它转换成字符串
        barcodeData = barcode.data.decode("UTF8")
        barcodeType = barcode.type

        # 绘出图像上条形码的数据和条形码类型
        text = "{} ({})".format(barcodeData, barcodeType)
        cv.putText(image, text, (x, y - 10), cv.FONT_HERSHEY_SIMPLEX, .5, (0, 0, 125), 2)
        # 向终端打印条形码数据和条形码类型
        print("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData))
    return image


def detect():
    camera = cv.VideoCapture(0)
    while True:
        # 读取当前帧
        ret, frame = camera.read()
        # 转为灰度图像
        gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
        im = decode_display(gray)
        c = cv.waitKey(5)  # 等待5毫秒
        cv.imshow("camera", im)
        if (c == 27):  # 按下esc键关闭摄像头窗口
            camera.release()
            cv.destroyAllWindows()
            break


def pil_read(image=''):
    img = Image.open(image)
    # img = ImageEnhance.Brightness(img).enhance(2.0)#增加亮度
    # img = ImageEnhance.Sharpness(img).enhance(17.0)#锐利化
    # img = ImageEnhance.Contrast(img).enhance(4.0)#增加对比度
    # img = img.convert('L')#灰度化
    # img.show()
    barcodes = pyzbar.decode(img)
    for barcode in barcodes:
        barcodeData = barcode.data.decode("utf-8")
        print(barcodeData)
        return barcodeData


def append_file(content):
    f = open(base64_str_file, 'a')
    f.write(content)
    f.close()


def get_idx(file_name) -> str:
    prefix = 'shot_'
    begin = file_name.index(prefix) + len(prefix)
    end = file_name.index('.png')
    return file_name[begin:end]


qr_prefix = r'D:/workspace/qr_code_dir/'
pack_str_file = date_util.fmt_second()
base64_str_file = rf'{qr_prefix}{pack_str_file}.txt'
dist_file = rf'{qr_prefix}{pack_str_file}.zip'


def main():
    # prefix = r'D:/workspace/ScrShot/'
    # file_list = [prefix + '2022-02-12_115736.png']

    prefix = r'D:/workspace/qr_code_dir/src_png/'
    file_list = listdir(prefix)
    print(file_list)
    file_list = sorted(file_list, key=lambda file: int(get_idx(file)))
    if len(file_list) <= 0:
        print(fr'截屏目录为空')
        return
    for file_path in file_list:
        print(file_path)
        append_file(pil_read(prefix + file_path))

    #  base64.exe -d pack.txt > pack.zip
    base64_file.de_base64_file(base64_str_file, dist_file)


if __name__ == '__main__':
    main()
    open_dir = qr_prefix.replace('/', '\\')
    os.system(rf'start explorer {open_dir}')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值