您当前的位置: 首页 >  Python

插件开发

暂无认证

  • 1浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python-类对象转json对象到文件-文件转字典再到类对象-中文支持-生成二维码-代码计时

插件开发 发布时间:2022-05-19 10:14:31 ,浏览量:1

文章目录
    • 1.二维码生成
      • 1.1.安装qrcode库
      • 1.2.make函数
      • 1.3.中间添加图片
    • 2.类对象转json对象转文件
    • 3.文件转json对象转类对象
    • 4.字符串编码转换
    • 5.代码计时
    • 6.作者答疑

1.二维码生成 1.1.安装qrcode库

使用qrcode库生成。先安装qrcode库。

python -m pip install qrcode -i https://mirrors.aliyun.com/pypi/simple/

1.2.make函数

生成源代码如下: 生成文件名图像,携带信息info。

def Run(filename,info):
    #调用qrcode的make()方法传入url或者想要展示的内容
    img = qrcode.make(info)
    #写入文件
    with open(filename, 'wb') as f:
        img.save(f)

#生成图片,后面是网址信息,浏览器扫描后,看到信息会跳转到指定的网页。
QRcodeOpt.Run(r"二维码.png","https://www.baidu.com/s?wd=python%20qrcode&rsv_spt=1&rsv_iqid=0xd13c46b300050852&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_dl=tb&rsv_enter=1&oq=python%2520%25E4%25BA%258C%25E7%25BB%25B4%25E7%25A0%2581&rsv_btype=t&inputT=4726&rsv_t=ade8JBkZLEk0cvP5NU10GsZmdFFm1lQiwK88rLWwGUYGnxVP9tAEPjbXgdDRquchZLw%2F&rsv_sug3=24&rsv_sug1=15&rsv_sug7=100&rsv_pq=d76c220a00105472&rsv_sug2=0&rsv_sug4=5361")
1.3.中间添加图片

生成的二维码中间带logo。

import qrcode
from PIL import Image
import matplotlib.pyplot as plt

def getQRcode(data, file_name):
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        box_size=5,
        border=4,
    )

    # 添加数据
    qr.add_data(data)
    # 填充数据
    qr.make(fit=True)
    # 生成图片
    img = qr.make_image(fill_color="green", back_color="white")

    # 添加logo,打开logo照片
    icon = Image.open("tmp/tmp.png")
    # 获取图片的宽高
    img_w, img_h = img.size
    # 参数设置logo的大小
    factor = 6
    size_w = int(img_w / factor)
    size_h = int(img_h / factor)
    icon_w, icon_h = icon.size
    if icon_w > size_w:
        icon_w = size_w
    if icon_h > size_h:
        icon_h = size_h
    # 重新设置logo的尺寸
    icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
    # 得到画图的x,y坐标,居中显示
    w = int((img_w - icon_w) / 2)
    h = int((img_h - icon_h) / 2)
    # 黏贴logo照
    img.paste(icon, (w, h), mask=None)
    # 终端显示图片
    plt.imshow(img)
    plt.show()
    # 保存img
    img.save(file_name)
    return img
getQRcode("https://plugin.blog.csdn.net/", 'my.png');
2.类对象转json对象转文件

内存数据序列化为json对象,再保存到文件。

# 数据结构item
class Draw_Item:
    def __init__(self):
        self.m_Type = "poly";  # "poly" "text"
        #######文字信息######################
        self.m_Text = "";  # 文字内容
        self.m_TextPosX = "0";  # 文字坐标X
        self.m_TextPosY = "0";  # 文字坐标Y
        self.m_TextSizePt = "8";  # 文字字体大小
        self.m_TextColor = "";  # 文本颜色
        self.m_TextFamily = "";  # 文本字体名称

        #######多边形信息######################
        self.m_PolyFillColor = "";  # 多边形填充颜色
        self.m_PolyStrokeColor = "";  # 多边形描边颜色
        self.m_PolyStrokeWidth = "0.07";  # 描边宽度毫米
        self.m_Polys = [];  # 多边形坐标数据

# 数据结构json
class Json_Data:
    def __init__(self):
        self.m_WaiBianJu = "35";  # 外边距
        self.m_Width = "0";  # 图版宽
        self.m_Height = "0";  # 图版高
        self.m_Filename = "";  # 文件名
        self.m_DrawItems = [];  # 绘图对象列表
        
# 类对象转为json字符串
data = json.dumps(jsonObj, default=lambda obj: obj.__dict__);
# 中文支持
data = json.dumps(jsonObj, default=lambda obj: obj.__dict__,ensure_ascii=False);
3.文件转json对象转类对象

从文件读取数据转为字典对象,再将字典对象数据更新到类对象中。

class Json_Data:
    def load_file(self, filename):
        data = None;
        # 读取文件数据
        with open(filename, 'r', encoding='gb2312') as file:
            data = file.read();
        if (data == None):
            return False;

        #字典对象转数据
        objdict = json.loads(data);
        self.__dict__.update(objdict);
4.字符串编码转换

将字符串数据按gb2312编码输出。

    # 写入文件
    with open(filename, 'w',encoding='gb2312') as file:
        file.write(data);
5.代码计时

根据时钟两个点之间的差值,作为程序运行时间。

import time
if __name__ == '__main__':
    start = time.time();
    run();
    end = time.time()
    info="程序运行时间:%.3f秒"%(end - start);
    print(info)
6.作者答疑

如有疑问,敬请留言。

关注
打赏
1665481431
查看更多评论
立即登录/注册

微信扫码登录

0.0401s