背景需求:
曾经给6位大班幼儿做过一个插入纸盒茶杯,底部有幼儿的姓名印章(李四光印)
我想让每位孩子都有一个自己名字的"印章"
2024年12月7日 网络查询后,发现"印章"多用"篆书""隶书""楷书"等
因为我经常听到"篆刻",而且篆书排在第一,所以想用篆书
大篆
小篆
九叠篆(塞满,艺术性强、宋代国朝官印)
花鸟篆(文字以花鸟形式替代)
小结:
考虑到操作便利性和艺术性,我选了"九叠篆",四四方方更适合印章效果。
字体下载
测试一:下载白舟九叠篆
复制到font下
问题1:部分字无法用篆刻九叠篆样式写出来
解决1:把名字转成繁体,再用九叠篆(hkkjtr),部分姓氏变成篆体了
问题2:还是有部分姓氏、名字无法转
2、测试二:下载一个图章生成器
有木马,自动删除了,下载不了
3、测试三:"九叠篆"在线字体网,直接做4字印章(2*2)
(1)字体布局
两个名字:从左向右,从上到下
我希望是从上到下,从右到左(古代右向左),把名字和印章两字调整顺序
三个名字
四个名字
小结:这个在线平台能把孩子们的名字生成四字印章图片,我可以用UIBOT自动将繁体名字复制到这个在线平台里。获取九叠篆印章图案
(2)特殊字体设置
可能1:部分繁体字没有九叠篆字体
我把几个特殊字体输入试试看。好多字的确没有九篆体
可能2:繁体转简体出现九叠篆字体
我把名字改回简体字,再试试,姓氏出来了。那就只有第二个名字没有。
可能3:简繁体都没有的文字请网站开发者设计
这位开发者很厉害,对于不存在的字,他也会愿意设计!,我先手动测试哪些字(简体或繁体)都不存在,需要被设计。
人工搜索后,发现有4个字不存在,需要设计。
等开学后,再光顾网站,看看汉字的九叠篆样式是否存在。
然后写UIBOT代码,自动读取EXCLE的简体字,重新组合字序,下载名字图片。再用Python,进行图案处理(红色转黑色,水平翻转做镜像字,批量调整大小等)。制作成学具。让幼儿把印章图片贴在KT版上,然后沿着线戳洞。制作一个可以按印泥的印章。
感谢这个网站的大神,提供了九叠篆印章的图片!
实验四:已有字拼合出生僻字
考虑到这个网站不挣钱,开发者未必会经常登录并设计,所以我想利用网站上已有的九叠篆字,提取边旁部首,PS合成图片
"琬":王字旁的"环玲珠珍"
让AI写一点王字旁的字
关键词:王字旁的字,只要字,表格形式呈现,
放到搜索字体里面,一共19字
可以发现 王字旁有三种写法
其中"珍"的"王"这种写法出现次数最多
"琬":宛的字不多
关键词:汉字里面有宛字旁,左右结构,只要字,不要任何说明,表格形式呈现
宛字的九叠篆写法都一样:保留一个"婉"
同样方法测试:"炎,宣、斤、页"
如果发现找不到字,就重新新建一个对话框,再搜索
这个斤是左右结构,但是每个字有大小的
都是一样的"页",也是有"宽"有"窄"
由此,可以通过查找相关的汉字,获取,获取特殊汉字的边旁部首,进行组合
琬:珍和婉
琰:珍和淡
因为暄只有一个写法,只能三个王字里面选:但是三个王都比日宽,所以
所以恐怕要把宣字左右缩小了、
颀=顷+斯
保存后的效果图
接下来就是UIBOT写代码,读取文字,重新组合位置,制作右向左的四个字,生成图片(等30秒),另存为"学号+名字.png"
因为UIBOT程序一直在下载其他图片,
所以我还是用Python写了一个代码,Python识别屏幕坐标比较烦,不像UIBOT可以识别屏幕。它只能一次次测试,获取坐标数字
python
'''
查找坐标位置的代码
阿夏
20250130
'''
import time
import pyautogui
import pyperclip
time.sleep(2)
# 获取当前鼠标的位置
x, y = pyautogui.position()
print("Current mouse position:", x, y)
全部代码
python
'''
根据名字,下载九叠篆姓名印章(四字) 英文拼音输入法状态,先打开一个百度界面
星火讯飞、阿夏
20250130
'''
import pandas as pd
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250130篆章九叠篆'
# 读取 Excel 文件
df = pd.read_excel(path + r'\姓名.xlsx', usecols=[0, 1])
# 打印第一列和第二列组合的文字(图片名称) 创建图片名称列表
image_names = []
# 打印第一列和第二列组合的文字(图片名称)并添加到列表中
for index, row in df.iterrows():
image_name = f"{row[0]:02} {row[1]}"
# print(image_name)
image_names.append(image_name)
print(image_names)
# 定义一个函数来根据字数添加后缀
def add_suffix(cell):
if len(str(cell)) == 2:
return str(cell) + '印章'
elif len(str(cell)) == 3:
return str(cell) + '印'
else:
return cell
# 需要做图章的四个文字
# df[df.columns[1]] = df[df.columns[1]].apply(add_suffix)# [1,'余三',
df = df[df.columns[1]].apply(add_suffix)# ['余三',
# 将修改后的 DataFrame 转换为列表
modified_list = df.values.tolist()
print(modified_list)
for i in range(len(image_names[19:])):
# 进入自动点击屏幕设置(打开九叠篆网站)
import pyautogui
import pyperclip
import time
# 移动鼠标到指定的坐标位置
# 新建页面
pyautogui.moveTo(287,22)
# 执行鼠标左键点击操作
pyautogui.click()
# 打开网站
pyautogui.moveTo(259, 64)
# 执行鼠标左键点击操作
pyautogui.click()
# 等待一小段时间以确保点击生效
time.sleep(1)
# 输入网址
url = 'http://jiudiezhuan.com/createseal.asp'
pyautogui.typewrite(url)
time.sleep(3)
# 按下回车键以访问网址
pyautogui.press('enter')
# 弹框
pyautogui.moveTo(1130,179)
# 执行鼠标左键点击操作
pyautogui.click()
# 输入框
# 将中文文字复制到剪贴板
pyautogui.moveTo(794, 377)
pyautogui.click()
text = modified_list[19:][i]
pyperclip.copy(text)
# 模拟按下Ctrl+V粘贴文本
pyautogui.hotkey('ctrl', 'v')
# 再按回车键
pyautogui.press('enter')
time.sleep(5)
# 生成图片
pyautogui.moveTo(1741,617)
pyautogui.click()
time.sleep(20)
# 右击另存你好,世界!
# x, y = 1000, 2000
pyautogui.moveTo(876, 452)
# 执行鼠标右击操作
pyautogui.rightClick()
time.sleep(2)
pyautogui.moveTo(917,504)
# 执行鼠标右击操作
pyautogui.rightClick()
time.sleep(5)
# # 文件名输入
# pyautogui.moveTo(175,802)
# # 执行鼠标右击操作
# pyautogui.rightClick()
# # 文件名
text = image_names[19:][i]
pyperclip.copy(text)
# 模拟按下Ctrl+V粘贴文本
pyautogui.hotkey('ctrl', 'v')
# 再按回车键
pyautogui.press('enter')
time.sleep(3)
# 关闭页面
pyautogui.moveTo(497,18)
# 执行鼠标左键点击操作
pyautogui.click()
画了半个小时,才把30+4个名字图片生成好
这是最基础的左向右、上到下的布局。如果我想变成上到下,右到左又要这么来一次,不仅费时,几个拼图字还要合成两次。
所以我发现完全可以把30个名字,每个字单独拆开来,去掉重复字(我们班"王、一"比较多)",然后依次生成单个字,用Python遍历读取方式,提取需要的四个字,用活字印刷的方式布局,那么想怎么布局就能怎么布局,还可以更改印章、之印、专章等字)
python 用代码读取每个汉字,去掉重复。
python
'''
根据名字,下载九叠篆姓名印章(单字)活字印刷拼合 英文拼音输入法状态,先打开一个百度界面
星火讯飞、阿夏
20250130
'''
import pandas as pd
start=22
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250130篆章九叠篆'
# 读取 Excel 文件
df = pd.read_excel(path + r'\姓名.xlsx', usecols=[0, 1])
# 创建图片名称集合
image_names_set = set()
# 打印第一列和第二列组合的文字(图片名称)并添加到集合中,把每个名字变成单个的字
for index, row in df.iterrows():
# 假设单元格内容是用逗号分隔的
cell_content = str(row[1])
elements = cell_content.split(',')
for element in elements:
element = element.strip()
# 将元素中的每个字符拆分成单独的元素
for char in element:
image_names_set.add(char)
# 将集合转换为列表
image_names = (list(image_names_set))
# 排序,否则文字下载的时候每次的顺序都不同,如果断了,不知道从那个字开始
image_names.sort()
print(image_names)
print(len(image_names))
# 77
把终端显示的所有单个汉字,复制(77字)
黏贴到"九叠篆-搜索字形"的文字框里(100字以内)
所有字体都显示出来
4个汉字没有
python
'''
根据名字,下载九叠篆姓名印章(单字)活字印刷拼合 英文拼音输入法状态,先打开一个百度界面
星火讯飞、阿夏
20250130
'''
import pandas as pd
import time
import pyautogui
import pyperclip
start=54
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250130篆章九叠篆'
# 读取 Excel 文件
df = pd.read_excel(path + r'\姓名.xlsx', usecols=[0, 1])
# 创建图片名称集合
image_names_set = set()
# 打印第一列和第二列组合的文字(图片名称)并添加到集合中,把每个名字变成单个的字
for index, row in df.iterrows():
# 假设单元格内容是用逗号分隔的
cell_content = str(row[1])
elements = cell_content.split(',')
for element in elements:
element = element.strip()
# 将元素中的每个字符拆分成单独的元素
for char in element:
image_names_set.add(char)
# 将集合转换为列表
image_names = (list(image_names_set))
# 排序,否则文字下载的时候每次的顺序都不同,如果断了,不知道从那个字开始
image_names.sort()
print(image_names)
print(len(image_names))
# 77
# 打开网址(只有1次)
pyautogui.moveTo(287,22)
# 执行鼠标左键点击操作
pyautogui.click()
time.sleep(1)
# 输入网址
url = 'http://jiudiezhuan.com/findlist.asp'
pyautogui.typewrite(url)
# 按下回车键以访问网址
pyautogui.press('enter')
time.sleep(1)
# 弹框
pyautogui.moveTo(1130,179)
# 执行鼠标左键点击操作
pyautogui.click()
time.sleep(2)
for i in range(len(image_names[start:])):
# 进入自动点击屏幕设置(打开九叠篆网站)
# 输入框
# 将中文文字复制到剪贴板
pyautogui.moveTo(697,293)
pyautogui.click()
# pyautogui.moveTo(1527,778)
# pyautogui.click()
# # 双击
pyautogui.doubleClick()
text = image_names[start:][i]
pyperclip.copy(text)
# 模拟按下Ctrl+V粘贴文本
pyautogui.hotkey('ctrl', 'v')
time.sleep(2)
# 再按回车键
pyautogui.moveTo(1109,320)
pyautogui.click()
time.sleep(2)
# 下载按钮
pyautogui.moveTo(142,590)
pyautogui.click()
# 下载png高清图
pyautogui.moveTo(249,605)
pyautogui.click()
time.sleep(3)
# 保存
pyautogui.press('enter')
time.sleep(3)
一次只下载一个字,这一次用了17分钟就下载了73个字,速度快多了。
PPTX,把两张图片叠放在一起,重新组合
左右部首都缩窄一点
琬
琰
颀
用两种颜色区分
组合图片效果
放到单字字库里
制作图片组合
python
'''
活字拼合:根据名字,提取对应九叠篆文字的图片,组合成2*2印章形状
星火讯飞、阿夏
20250130
'''
import pandas as pd
from PIL import Image
import os
from PIL import Image, ImageDraw
# 画布大小(正方形)
pic=500
# 边距线框粗细
bj=10
start = 30
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250130篆章九叠篆'
# 读取 Excel 文件
df = pd.read_excel(path + r'\姓名.xlsx', usecols=[0, 1])
# 打印第一列和第二列组合的文字(图片名称) 创建图片名称列表
image_names = []
for index, row in df.iterrows():
image_name = f"{int(row[0]):02} {row[1]}"
image_names.append(image_name)
print(image_names)
# 定义一个函数来根据字数添加后缀
def add_suffix(cell):
if len(str(cell)) == 2:
return str(cell) + '印章'
elif len(str(cell)) == 3:
return str(cell) + '印'
else:
return cell
# 需要做图章的四个文字
df[df.columns[1]] = df[df.columns[1]].apply(add_suffix)
# 将修改后的 DataFrame 转换为列表
modified_list = df[df.columns[1]].values.tolist()
print(modified_list)
# 只要前面30个人
modified_list = modified_list[:start]
# 使用列表推导式将每个名字拆分成单个字符
split_chars = [char for name in modified_list for char in name]
print(split_chars)
print(len(split_chars))
# 定义文件夹路径和目标文件名列表
folder_path = path + r'\01 单字下载'
# 获取文件夹中的所有文件
all_files = os.listdir(folder_path)
# 按照姓名出现的顺序依次读取字的图片(活字)
matched_files = []
for char in split_chars:
matched_files.extend([os.path.join(folder_path, file) for file in all_files if char in file])
print(matched_files)
# 将字符列表按每4个一组进行嵌套(四个字一组)
nested_chars = [matched_files[i:i+4] for i in range(0, len(matched_files), 4)]
print(nested_chars)
print(len(nested_chars))
# 遍历每个位置并插入对应的图片
output_folder = os.path.join(path, '02 图片组合')
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 遍历每个位置并插入对应的图片
for i, group in enumerate(nested_chars):
# 创建一个500x500的透明背景图
background = Image.new('RGBA', (pic, pic), (255, 255, 255, 0))
# 定义插入图片的位置(左上,左下 ,右上,右下)
# 坐标两款
z1=bj
z2=int(pic/2)
# 图片大小
z3=z2-bj
positions = [(z1, z1), (z1, z2), (z2, z1), (z2,z2)]
for pos, image_path in zip(positions, group):
try:
img = Image.open(image_path).convert("RGBA")
img = img.resize((z3,z3)) # 调整图片大小为250x250
background.paste(img, pos, img) # 使用alpha通道粘贴图片
except Exception as e:
print(f"Error processing {image_path}: {e}")
# 在500x500背景上添加红色边框5磅
draw = ImageDraw.Draw(background)
border_color = (255, 0, 0) # 红色
border_width = bj # 5磅
for j in range(border_width):
draw.rectangle([j, j, 499-j, 499-j], outline=border_color)
output_path = os.path.join(output_folder, f"{image_names[i]}.png")
background.save(output_path)
print(f"Saved combined image to {output_path}")