【教学类-44-08】20240319 “(幼儿用)数字练习簿1.0”(A4版)

 

 

背景需求:

我一直想把 “(幼儿用)数字练习簿”的内容复刻出来——这里面的字体始终找不到,是一种已经做成图片的手写数字字体

ffdd1626795947079b8322fcc21bb88b.png

素材准备:

1、买了一本(幼儿用)数字练习簿,把每一页扫描

5878646a108446ca82ec06e013dd3f18.png

25c802bd41724de18b9c9a9306dba6a0.png

9cc7d93e542a443fad7cf3f47bbc7b77.png

测量本子大小

d833b34c09884a759d815167c74cefba.png

本子长宽:25.8CM*18.5CM,比A4纸小

d4aaaf3bf06f4e078a65db24cd7dda01.png查看打印纸尺寸,发现并没有正好大小的打印纸(我园常用的A4,少量有A3、B5),其他纸型号也没有。

所以我将先试试将已扫描的字帖图片写入A4大小的纸张。

2、纸张模板

 

133bf6d758654769b571931937d373fb.png

ffc1e88133ed44159cc2ba94fc76fb0b.png

26fa8f774444441683162a67fceda22b.png

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黑白图片文件夹内。')

d9ab44e23d774795a7fe3535c5f8e548.pngf1c7ad4f17854320a54170d57c5b4d1e.pngde12b7ca64564519b4f61de41884c420.png

a78cc80b4c794f948643ecd2f30aeadb.png

扫描切割时,图案可能会倾斜,留边,a9795c1b8c6c4a0eb36cfd34b70d0acc.png

5521ceae93a8447693537856046807e4.png4、用PS把每张图片的边缘修成白色。

e54b52cd1f1848339d0d1dfb021eb660.png1869950e06bd4bbcaabf2d1d10eaf23b.pngf01b83ab3e644bafb6b40999ff3110ea.png3126d6fa17a24a75a140035b8202b1dc.png

把图片修白后,把文件名增加PS字样,以免再次生成时,修过的图片被覆盖(也可直接将00原始图片修图)eff7b80458144a67b0a3aa0d4825dfdd.png

19d161a7ba9940b6a29074eb69c549c6.png

 

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('操作完成。')

bdc3ad7ce3f0434e9643e36637f48700.png

356de9fd135a47c39401de53295204f8.png

 

375f8354f3c04f4c8d7f689b377abdcc.png

8968def5e7b145009a8e300be3257ce3.png3d77c4a03ad044dfbba2a21752042a0c.png4f0800e75c7c4f8ea9b8a399039fa1f1.png

先打印一份看看文字灰度是否适合幼儿书写,在制作2.0装订版本的,就是第一张纸包含P1、P2、P31、P32,第二章纸包含P3、P4、P29、P30

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/469826.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯--基础(哈夫曼)

import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner;public class BASIC28 {//哈夫曼书public static void main(String[] args) {Scanner Scannernew Scanner(System.in);int nScanner.nextInt();List<Integer&…

Visual Studio 2013 - 调试模式下查看监视窗口

Visual Studio 2013 - 调试模式下查看监视窗口 1. 监视窗口References 1. 监视窗口 Ctrl Alt W&#xff0c;1-4&#xff1a;监视窗口 (数字键不能使用小键盘) or 调试 -> 窗口 -> 监视 -> 监视 1-4 调试状态下使用&#xff1a; 在窗口中点击空白行&#xff0c;…

Java项目打包成Docker镜像

将项目打包成Docker镜像 将项目打包成Docker镜像的原因是可以在一台电脑的环境下模拟多台不同性能电脑响应高并发请求时候的表现。这里我们模拟半个CPU、一个CPU还有两个CPU的情况 在pom.xml文件中添加jib插件&#xff08;前提电脑安装了maven和Java 的 JDK才能成功完成编译&…

学习笔记 | 微信小程序项目day04

今日学习内容 热门推荐下转页面 热门推荐下转页面 1、定义类型 import type { PageResult, GoodsItem } from ./global/** 热门推荐 */ export type HotResult {/** id信息 */id: string/** 活动图片 */bannerPicture: string/** 活动标题 */title: string/** 子类选项 */…

STM32—控制蜂鸣器(定时器)

目录 1 、 电路构成及原理图 2 、编写实现代码 main.c tim_irq.c 3、代码讲解 4、烧录到开发板调试、验证代码 5、检验效果 此笔记基于朗峰 STM32F103 系列全集成开发板的记录。 1 、 电路构成及原理图 定时器中断是利用定时器的计数功能&#xff08;向上计数或向下计…

Java 多线程(抢CPU)

哈哈哈 什么是多线程&#xff1a;可以让程序同时做多件事情。 多线程的作用&#xff1a;提高效率。 多线程的应用场景&#xff1a;想让多个事情同时运行。 并发&#xff08;多个指令在单个CPU交替执行&#xff09;和并行&#xff08;多个指令在多个CPU交替执行&#xff09; …

《UE5_C++多人TPS完整教程》学习笔记28 ——《P29 Mixamo 动画(Mixamo Animations)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P29 Mixamo动画&#xff08;Mixamo Animations&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者…

MySQL数据自动同步到Es

Logstash 测试数据准备 DROP DATABASE IF EXISTS es;CREATE DATABASE es DEFAULT CHARACTER SET utf8;USE es;CREATE TABLE book (id INT NOT NULL,title VARCHAR(20),author VARCHAR(20),price DECIMAL(6,2),PRIMARY KEY(id) );DROP PROCEDURE IF EXISTS batchInsertBook;DELI…

飞桨AI应用@riscv OpenKylin

在riscv编译安装飞桨PaddlePaddle参见&#xff1a; 算能RISC-V通用云编译飞桨paddlepaddleopenKylin留档_在riscv下进行paddlelite源码编译-CSDN博客 安装好飞桨&#xff0c;就可以用飞桨进行推理了。刚开始计划用ONNX推理&#xff0c;但是在算能云没有装上&#xff0c;所以最…

第六篇:视频广告格式上传指南(上) - IAB视频广告标准《数字视频和有线电视广告格式指南》

第六篇&#xff1a; 视频广告格式和上传指南&#xff08;上&#xff09; --- 我为什么要翻译介绍美国人工智能科技公司IAB系列技术标准&#xff08;2&#xff09; 流媒体数字视频的广告格式分为线性和非线性两大类。任何一个广告都可以与显示在视频播放器外部的伴随横幅一起提…

教你读懂cert-manager官网并且使用letsencrypt(一)。

这一篇文章主要讲如果通过cert-manager letsencrypt的方式 自动管理你的证书。 一、怎么装&#xff1f; Installation - cert-manager Documentation 选个符合你环境的&#xff0c;推荐helm来管理你的应用。 二、怎么用&#xff1f; 官网说的&#xff1a; 意思就是你安装了…

Positive Technologies 专家发现的漏洞已在 ABB 控制器中得到修复

&#x1f31f; 我们的同事一如既往地表现出色&#xff1a;应用分析专家 Natalia Tlyapova 和 Denis Goryushev 因发现 Freelance AC 900F 和 AC 700F 控制器中的两个漏洞而受到 ABB 的表彰。 这些设备用于自动化大规模连续循环生产设施和构建企业配送控制系统。利用这些漏洞的…

java算法第28天 | 93.复原IP地址 78.子集 90.子集II

93.复原IP地址 思路&#xff1a; 这里startIndex为插入‘.’的位置&#xff0c;使用回溯法遍历所有插入的位置&#xff0c;直接在原始字符串上操作。要注意的是开闭区间的规定&#xff08;这里我规定的是左闭右闭区间&#xff09;。还要明确什么时候能return。 class Solution…

应用案例多且广 八轴测径仪凭什么备受轧钢客户青睐?

在当今高速发展的工业领域&#xff0c;高效、精准的在线测量设备已经成为了企业提高生产效率和产品质量的重要保障。八轴测径仪&#xff0c;作为一款高精度、高效率的在线测量设备&#xff0c;广泛应用于钢铁、冶金、机械制造等行业。 它采用了先进的光学测量技术和智能算法&am…

前端 - 基础 表单标签 -- 表单元素( input - type属性) 文本框和密码框

表单元素 &#xff1a; 在表单域中可以定义各种表单元素&#xff0c;这些表单元素就是允许用户在表单中输入或选择 的内容控件。 表单元素的外观也各不一样&#xff0c;有小圆圈&#xff0c;有正方形&#xff0c;也有方框&#xff0c;乱七八糟的&#xff0c;各种各样&#xf…

网络工程师之路由交换技术篇

网络工程师之路由交换技术篇 路由交换之技术篇ARPICMPBPDUIPv6IP编址MAC其他技术点参考 以下均为个人笔记&#xff0c;摘录到csdn做备份 路由交换之技术篇 ARP Operation Code指定了ARP报文的类型&#xff0c; 包括ARP request 和ARP reply&#xff1b;取值为1或者2 &#x…

代码学习记录22--回溯算法第三天

随想录日记part22 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.17 主要内容&#xff1a;今天主要是结合类型的题目加深对回溯算法的理解&#xff1a;1.组合总和;2.组合总和 ;3.分割回文串。 39. 组合总和 40.组合总和II131.分割回文串 Topic1组合总和 题…

Leetcode 79. 单词搜索

心路历程&#xff1a; 做完这道题才发现是回溯&#xff0c;一开始想的是递归&#xff0c;判断完第i个字符后&#xff0c;只需要挨个判断第i1个字符在不在第i个字符的邻域。后来发现由于不能重复使用元素&#xff0c;所以需要维护一个visited列表&#xff0c;并且在遍历所有可能…

嵌入式3-19

1、哈希表的代码写完&#xff0c;写出给出关键字&#xff0c;找到该关键字在哈希表(指针数组)中下标的位置&#xff0c;以及在链表中的位置。(因为返回值只有一个&#xff0c;所以结果直接找到通过输出语句输出) void search(node *H,int key); 2、快速排序和折半查找的代码写…

Maven项目如何导入依赖包

一、导入依赖包 导入mysql依赖包 第一步&#xff1a;登录Maven官网 Maven官网&#xff1a;https://mvnrepository.com/search?qmysql 第二步&#xff1a;点击MySql Connector Java 第三步&#xff1a;点击任意一个版本 第四步&#xff1a;将以下内容复制到pom.xml中 导入j…