评价生成器
时间:2022-07-24
本文章向大家介绍评价生成器,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
做一个评价器——来自大树的需求。
如果有好的想法,可以留言,有时间有能力可以帮助实现你的想法。
很多老师写评价,如果没有好工具,只能通过PPT或者一些其它排版工具,复制粘贴一堆内容,还要调整大小,位置,很不方便。
学生多的话,重复的做也是一件很无聊的事情。
看了一下需要的效果。
有5个地方的内容是填写的,后面是一张背景图片。
原始背景图
要实现可以写评价的效果,其实就转化为在背景图上写文字和粘贴图片。
处理图片立马想到使用pillow库,里面有现成的写文字和粘贴图片的方法,最麻烦的就是这些内容需要定位。
需要解决的问题:
坐标定位
学生名字,课程题目,照片粘贴位置,二维码位置,评价内容坐标位置等的计算。
自适应计算
标题要居中,评价内容如何实现自动换行,如何实现图片刚好适应背景图片框。
版本一:代码操作
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw, ImageFont
font_name = ImageFont.truetype('anna.ttf', 60)
font_content = ImageFont.truetype('anna.ttf', 50)
student_name = "小花"
student_name_pos=(140,400)
work_name = "《蒸汽火车》"
work_name_pos_y = 1140
evaluate_info = """本次课题让孩子了解到火车的发展历史,学习了蒸汽火车的连杆机构。本次课程是宝贝们首次的合作课题,大家积极交流自己的想法,锻炼了宝贝们的团队合作能力。"""
evaluate_info_pos = (50, 1240)
line_words = int((1080-50*2)//50)
lines = len(evaluate_info)//line_words+1
new_evaluate_info=""
for line in range(lines):
new_evaluate_info += evaluate_info[line*line_words:(line+1)*line_words]
new_evaluate_info +="n"
print(new_evaluate_info)
bg_img = "图片1.png"
bg_img_x=(1080,1920)
work_img = "学生.png"
work_img_pos=(110,500) #970-100,1080-500
qr_code_img = "code.png"
qr_code_img_size=(200,200)
qr_code_img_pos = (860, 1700)
bg_temp = Image.open(bg_img)
W,H=bg_temp.size
work_img_temp = Image.open(work_img).resize((870,580))
qr_code_img_temp = Image.open(qr_code_img).resize((200,200))
draw = ImageDraw.Draw(bg_temp)
draw.text(student_name_pos, student_name, fill=(0, 0, 0), font=font_name)
bg_temp.paste(work_img_temp,work_img_pos)
w, h = draw.textsize(work_name,font=font_name)
draw.text(((W-w)/2, work_name_pos_y), work_name, fill=(0, 0, 0), font=font_name)
draw.text(evaluate_info_pos, new_evaluate_info, fill=(0, 0, 0), font=font_content)
bg_temp.paste(qr_code_img_temp, qr_code_img_pos)
bg_temp.save("评价.png")
plt.imshow(bg_temp)
plt.show()
版本二:界面操作
from ui_evaluate import Ui_Evaluate
from PySide2.QtWidgets import *
import requests
import sys
from PIL import Image, ImageDraw, ImageFont
class Evaluate(QMainWindow, Ui_Evaluate):
def __init__(self):
super().__init__()
self.setupUi(self)
self.show()
#绑定查询按钮
self.pbtn_img.clicked.connect(self.select_img)
self.pbtn_evaluate.clicked.connect(self.process_img)
def select_img(self):
self.file_path = QFileDialog.getOpenFileName(self,"图片选择",filter=("*.jpg *.png"))[0]
self.lb_img_info.setText(self.file_path)
def process_img(self):
try:
font_name = ImageFont.truetype('anna.ttf', 60)
font_content = ImageFont.truetype('anna.ttf', 50)
student_name = self.l_name.text()
student_name_pos = (140, 400)
work_name = self.l_work_name.text()
work_name_pos_y = 1140
evaluate_info = self.text_evaluate.toPlainText()
evaluate_info_pos = (50, 1240)
line_words = int((1080-50*2)//50)
lines = len(evaluate_info)//line_words+1
new_evaluate_info = ""
for line in range(lines):
new_evaluate_info += evaluate_info[line*line_words:(line+1)*line_words]
new_evaluate_info += "n"
bg_img = "图片1.png"
bg_img_x = (1080, 1920)
work_img = self.file_path
work_img_pos = (110, 500) # 970-100,1080-500
qr_code_img = "code.png"
qr_code_img_size = (200, 200)
qr_code_img_pos = (860, 1700)
bg_temp = Image.open(bg_img)
W, H = bg_temp.size
work_img_temp = Image.open(work_img).resize((870, 580))
qr_code_img_temp = Image.open(qr_code_img).resize((200, 200))
draw = ImageDraw.Draw(bg_temp)
draw.text(student_name_pos, student_name, fill=(0, 0, 0), font=font_name)
bg_temp.paste(work_img_temp, work_img_pos)
w, h = draw.textsize(work_name, font=font_name)
draw.text(((W-w)/2, work_name_pos_y), work_name,
fill=(0, 0, 0), font=font_name)
draw.text(evaluate_info_pos, new_evaluate_info,
fill=(0, 0, 0), font=font_content)
bg_temp.paste(qr_code_img_temp, qr_code_img_pos)
bg_temp.save("评价.png")
QMessageBox.information(self, "提示", "评价图片完成")
except:
QMessageBox.information(self, "提示", "缺少内容未填写")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Evaluate()
sys.exit(app.exec_())
注:
版本一:安装对应的库直接就可以运行,中文的还需要字体文件,可以自己找一个喜欢的字体;
版本二 :同样安装对应的库,如果需要界面可以链接获取。
https://shimo.im/docs/QtCG8kKqXGQxtqgk
改进拓展方向:
可实现不同模板,文字图片位置不同,可以上传多张图片,支持手机操作。
如果有好的想法,可以留言哦,一起交流。
(全文完)
- 修改WordPress默认评论表情(附:跳转到多说评论框的方法)
- HDUOJ--------(1312)Red and Black
- HDUOJ---------(1045)Fire Net
- HDUOJ----(1175)连连看
- HDUOJ-----(1072)Nightmare(bfs)
- deque容器的运用一点一点积累
- HDUOJ----(1016)Prime Ring Problem
- WordPress获取文章浏览总数
- HDUOJ----Safecracker(1015)
- hduoj---Tempter of the Bone
- nyoj------------找球号(一)
- nyoj------擅长排列的小明
- HDUOJ-------(1211)RSA
- HDUOJ----1301 Jungle Roads
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 线性表--顺序表--双向链表(六)
- C/C++什么时候使用二级指针,你知道吗?
- 萌新学习C++容易漏掉的知识点,看看你中招了没有(一)
- 萌新不看会后悔的C++string字符串常用知识点总结
- salesforce零基础学习(九十六)项目中的零碎知识点小总结(四)
- CodeForces - 260C
- 疯子的算法总结(九) 图论中的矩阵应用 Part 2 矩阵树 基尔霍夫矩阵定理 生成树计数 Matrix-Tree
- STL常用对象,不会搞得C++跟没学一样
- 桥接模式
- CF--思维练习--CodeForces - 220C Little Elephant and Shifts (STL模拟)
- CF--思维练习--CodeForces - 221C-H - Little Elephant and Problem (思维)
- CF--思维练习--CodeForces - 219C Color Stripe (思维)
- 疯子的算法总结(六) 简单排序总 选择排序+插入排序+比较排序+冒泡排序
- C语言基础知识总结
- CF思维联系--CodeForces - 218C E - Ice Skating (并查集)