98 lines
4.7 KiB
Python
98 lines
4.7 KiB
Python
#!/bin/python
|
|
#coding: utf-8
|
|
# +-------------------------------------------------------------------
|
|
# | version: 1.0
|
|
# +-------------------------------------------------------------------
|
|
# | system: django-vue-lyadmin 专业版
|
|
# +-------------------------------------------------------------------
|
|
# | Author: lybbn
|
|
# +-------------------------------------------------------------------
|
|
# | QQ: 1042594286
|
|
# +-------------------------------------------------------------------
|
|
# ------------------------------
|
|
# 生成荣誉证书
|
|
# ------------------------------
|
|
import os
|
|
import re
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
import datetime
|
|
import time
|
|
from django.conf import settings
|
|
from config import DOMAIN_HOST,BASE_DIR
|
|
import random
|
|
from io import BytesIO
|
|
import requests
|
|
|
|
def createCertificate(avatarurl,company,id,name,year,month,day):
|
|
dirs = "usercertificate"
|
|
bg = Image.open(os.path.join(BASE_DIR, 'media','certificate','bg.png'))
|
|
x, y = bg.size
|
|
stamp = Image.open(os.path.join(BASE_DIR, 'media','certificate','stamp.png'))
|
|
#通过网络获取图片
|
|
# response = requests.get('https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eruSicV3HINJUQAV9kMlUCHEBZktHldvZOYpPmicj1cB0y2vKZxmyhtUsazNLuEFRqmNSI7E2dUWLfA/132')
|
|
response = requests.get(avatarurl)
|
|
response = response.content
|
|
BytesIOObj = BytesIO()
|
|
BytesIOObj.write(response)
|
|
avatar = Image.open(BytesIOObj)
|
|
title = company
|
|
thefontpath = os.path.join(BASE_DIR, 'media','SourceHanSansCN-Medium.otf')
|
|
titlefont = ImageFont.truetype(thefontpath,45)
|
|
sn = id
|
|
snfont = ImageFont.truetype(thefontpath, 45)
|
|
namefont = ImageFont.truetype(thefontpath, 58)
|
|
timefont = ImageFont.truetype(thefontpath, 50)
|
|
timefont2 = ImageFont.truetype(thefontpath, 37)
|
|
whitelayer = Image.new('RGBA', bg.size, (255,255,255))
|
|
whitelayer.paste(bg, (0, 0, x, y), bg)
|
|
layer = Image.new('RGBA', bg.size, (0, 0, 0, 0))
|
|
avatar = avatar.resize((260, 300))
|
|
whitelayer.paste(avatar, (530, 560))
|
|
draw = ImageDraw.Draw(whitelayer)
|
|
if len(name)<3:
|
|
content1 = "%s 同志于 %s 年 %s 月 %s 日,参" % (name, year, month, day)
|
|
content2 = "加合肥市印刷法规培训,经考试合格,"
|
|
content3 = "特发此证"
|
|
elif len(name)<5:
|
|
content1 = "%s 同志于 %s 年 %s 月 %s 日,"%(name,year,month,day)
|
|
content2 = "参加合肥市印刷法规培训,经考试合格,"
|
|
content3 = "特发此证"
|
|
else:
|
|
content = "%s 同志于 %s年%s月%s日,参加合肥市印刷法规培训,经考试合格,特发此证" % (name, year, month, day)
|
|
content1 = content[0:21]
|
|
content2 = content[21:39]
|
|
content3 = content[39:len(content)]
|
|
draw.text((430,940),text=title,font=titlefont,fill='black')
|
|
draw.text((430, 1075), text=sn, font=snfont, fill='black')
|
|
# draw.text((210, 1218), text=name, font=namefont, fill='black')
|
|
# draw.text((540, 1218), text=year, font=timefont, fill='black')
|
|
# draw.text((730, 1218), text=month, font=timefont, fill='black')
|
|
# draw.text((890, 1218), text=day, font=timefont, fill='black')
|
|
draw.text((200, 1218), text=content1, font=namefont, fill='black')
|
|
draw.text((160, 1318), text=content2, font=namefont, fill='black')
|
|
draw.text((160, 1418), text=content3, font=namefont, fill='black')
|
|
draw.text((780, 1715), text=year, font=timefont2, fill='black')
|
|
draw.text((920, 1715), text=month, font=timefont2, fill='black')
|
|
draw.text((1030, 1715), text=day, font=timefont2, fill='black')
|
|
layer.paste(stamp,(layer.size[0] - 500, layer.size[1] - 680))
|
|
out = Image.composite(layer, whitelayer, layer)
|
|
# out.show()
|
|
curr_time = datetime.datetime.now()
|
|
fn = time.strftime('%Y%m%d%H%M%S')
|
|
fn = fn + '_%d' % random.randint(100, 999)
|
|
# 重写合成文件名
|
|
image_name = fn + '.png'
|
|
time_path = curr_time.strftime("%Y-%m-%d")
|
|
img_task_dir = dirs # 对应models中的上传路径
|
|
sub_path = os.path.join(settings.MEDIA_ROOT, img_task_dir, time_path)
|
|
if not os.path.exists(sub_path):
|
|
os.makedirs(sub_path)
|
|
image_path = os.path.join(sub_path, image_name)
|
|
# web_img_url = settings.MEDIA_URL + img_task_dir + "/" + time_path + "/" + image_name#相对路径/media/xxx/xxxx/xxx.png
|
|
web_img_url = DOMAIN_HOST + settings.MEDIA_URL + img_task_dir + "/" + time_path + "/" + image_name # 绝对路径http://xxx.xxx.com/media/xxx/xxxx/xxx.png
|
|
# 另存图片
|
|
out.save(image_path)
|
|
return web_img_url
|
|
|
|
# if __name__ == "__main__":
|
|
# createCertificate("https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eruSicV3HINJUQAV9kMlUCHEBZktHldvZOYpPmicj1cB0y2vKZxmyhtUsazNLuEFRqmNSI7E2dUWLfA/132",'12','121','LYBBN','2023','05','01') |