背景需求:
我一直想把 “(幼儿用)数字练习簿”的内容复刻出来——这里面的字体始终找不到,是一种已经做成图片的手写数字字体
素材准备:
1、买了一本(幼儿用)数字练习簿,把每一页扫描
测量本子大小
本子长宽:25.8CM*18.5CM,比A4纸小
查看打印纸尺寸,发现并没有正好大小的打印纸(我园常用的A4,少量有A3、B5),其他纸型号也没有。
所以我将先试试将已扫描的字帖图片写入A4大小的纸张。
2、纸张模板
3、将彩色图片变成黑白图片,提升亮度
'''
目的,制作《幼儿用数字描字簿》整本A4
作者:AI对话大师
时间:2024年3月19日
'''
from PIL import Image, ImageEnhance, ExifTags
import os
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20240116幼儿用数字练习簿'
# 创建新建的234文件夹
new_folder = os.path.join(path, '01黑白图片')
if not os.path.exists(new_folder):
os.makedirs(new_folder)
# 读取原始图片文件夹内的所有图片
folder_path = os.path.join(path, '00原始图片')
for filename in os.listdir(folder_path):
if filename.endswith('.png') or filename.endswith('.jpg'):
# 打开图片
image_path = os.path.join(folder_path, filename)
img = Image.open(image_path)
# 纠正图片方向
for orientation in ExifTags.TAGS.keys():
if ExifTags.TAGS[orientation] == 'Orientation':
break
if img._getexif() is not None:
exif = dict(img._getexif().items())
if exif[orientation] == 3:
img = img.transpose(Image.ROTATE_180)
elif exif[orientation] == 6:
img = img.transpose(Image.ROTATE_270)
elif exif[orientation] == 8:
img = img.transpose(Image.ROTATE_90)
# 将彩色图片转换为灰色
gray_img = img.convert('L')
# 提升亮度
enhancer = ImageEnhance.Brightness(gray_img)
enhanced_img = enhancer.enhance(1.1) # 提升亮度
# # 提升对比度
# enhancer = ImageEnhance.Contrast(gray_img)
# enhanced_img = enhancer.enhance(4.0) # 提升对比度
# 保存图片到新建的01黑白图片文件夹内
new_image_path = os.path.join(new_folder, filename)
enhanced_img.save(new_image_path)
print('图片处理完成,结果已保存到01黑白图片文件夹内。')
扫描切割时,图案可能会倾斜,留边,
4、用PS把每张图片的边缘修成白色。
把图片修白后,把文件名增加PS字样,以免再次生成时,修过的图片被覆盖(也可直接将00原始图片修图)
5、将图片导入docx模板,然后批量生成单页的A4字体
代码展示:
print('------2、黑白数字贴图片写入word模板,------')
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
import os,time
# 读取111文件夹内234文件夹中的所有图片
image_folder =path+r'\01黑白图片(PS)'
images = [os.path.join(image_folder, img) for img in os.listdir(image_folder) if img.endswith('.jpg')]
print(images)
# 读取111文件夹内123.docx文件
docx_path =path+r'\幼儿用数字练习簿.docx'
doc = Document(docx_path)
table = doc.tables[0] # 获取第一个表格
# 保存处理后的Word文档到“零食文件夹”中
output_folder = path + r'\零时文件夹'
# 读取output_folder文件夹里所有的docx文件
output_docs = [os.path.join(output_folder, doc) for doc in os.listdir(output_folder) if doc.endswith('.docx')]
print(output_docs)
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 插入图片到表格中并设置大小、居中
for idx, img_path in enumerate(images):
cell = table.cell(0, 0)
cell.paragraphs[0].add_run().add_picture(img_path, width=Cm(29.7), height=Cm(20.9))
cell.paragraphs[0].alignment = 1 # 居中
print(idx)
# 1,2,3
doc.save(os.path.join(output_folder, f'{idx}.docx'))
time.sleep(2)
print('------3、多个word合并保存为一个PDF------')
from PyPDF2 import PdfFileMerger
import os
# 指定output_folder路径
output_folder = path + r'\零时文件夹'
# 创建PdfFileMerger对象
pdf_merger = PdfFileMerger()
# 遍历output_folder中的所有docx文件
for filename in os.listdir(output_folder):
if filename.endswith('.docx'):
docx_path = os.path.join(output_folder, filename)
pdf_path = os.path.splitext(docx_path)[0] + '.pdf' # 对应的PDF文件路径
convert(docx_path) # 转换为PDF
pdf_merger.append(pdf_path) # 将PDF文件添加到PdfFileMerger中
time.sleep(1)
# 输出PDF文件路径
output_pdf = path + r'\幼儿用数字练习簿1.0.pdf'
# 写入合并后的PDF文件
with open(output_pdf, 'wb') as out:
pdf_merger.write(out)
# 关闭合并后的PDF文件
pdf_merger.close()
print('PDF合并完成。')
print('------4、删除零时文件夹------')
# 删除“零食文件夹”
time.sleep(2)
import shutil
# 删除output_folder文件夹
shutil.rmtree(output_folder) # 递归删除文件夹,即:删除非空文件夹
print('操作完成。')
先打印一份看看文字灰度是否适合幼儿书写,在制作2.0装订版本的,就是第一张纸包含P1、P2、P31、P32,第二章纸包含P3、P4、P29、P30