背景需求:
我一直想把 “(幼儿用)数字练习簿”的内容复刻出来——这里面的字体始终找不到,是一种已经做成图片的手写数字字体
素材准备:
1、买了一本(幼儿用)数字练习簿,把每一页扫描
测量本子大小
本子长宽:25.8CM*18.5CM,比A4纸小
查看打印纸尺寸,发现并没有正好大小的打印纸(我园常用的A4,少量有A3、B5),其他纸型号也没有。
所以我将先试试将已扫描的字帖图片写入A4大小的纸张。
2、纸张模板
3、将彩色图片变成黑白图片,提升亮度
'''
目的,制作《幼儿用数字描字簿》整本A4
作者:AI对话大师
时间:2024年3月19日
'''from PIL import Image, ImageEnhance, ExifTagsimport ospath = 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':breakif 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,3doc.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) # 转换为PDFpdf_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