文章目录
1.二维码生成
1.1.安装qrcode库
- 1.二维码生成
- 1.1.安装qrcode库
- 1.2.make函数
- 1.3.中间添加图片
- 2.类对象转json对象转文件
- 3.文件转json对象转类对象
- 4.字符串编码转换
- 5.代码计时
- 6.作者答疑
使用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.作者答疑
如有疑问,敬请留言。