【教学类-38-02】20230724京剧脸谱2.0——竖版(小彩图 大面具)(Python 彩图彩照转素描线描稿)

news2024/11/24 17:33:35

结果展示

背景需求:

       前文体运用Python颜色提取功能,将“京剧脸谱”彩色图片转化为线描图案。

【教学类-38】20230724京剧脸谱1.0——横版“彩图线图等大”(Python 彩图彩照转素描线描稿)_reasonsummer的博客-CSDN博客

存在问题:

一、彩色面积大,效用低

1、彩打了一份,看着作品第一感觉就是:好浪费彩色硒鼓啊,如果35份面具都是这样打印,会损耗很多颜色,打印速度也慢。

2、左侧面具用来提示颜色,右侧线描面具供幼儿涂色。

思考:是否可以缩小彩色面具的大小,做一个小图片,给孩子一个色彩提示(把图片缩小放在竖版的左上角,线描涂色部分放大

二、面具使用,有点小

我在大7班随机抽了几个孩子,测试剪下来的线描面具。

面具只比幼儿脸小一点点,但是挖空的眼睛部分,不能确保幼儿双眼都在这个镂空位置(有遮挡,看不清)

考虑到如果面具太小,幼儿涂色太快的问题(拉平集体活动中的速度差异),所以我决定换个WORD,把1:1等大的彩图和线描图,改成小彩图和大线描图。让幼儿多画一会儿,并且镂空的眼睛部分能适合幼儿的眼距。

原来:A4横版1:1图(彩图与线描图一样大)

修改:a4竖版1:20图(彩图小,线描图很大)

脸谱面具又比整个脑袋还要大,但镂空的眼镜部分非常适合大班幼儿的眼距,就打印这样的脸谱面具吧。

“小彩图大面具”的制作过程

一、素材准备

1.小彩图(含文字)

2.线描图(含文字)

3.线描图 (切掉文字)

新建一个存放“无文字脸谱线描图片”的文件夹

4、WORD模板

重点说明:线描图是去掉下面文字的纯脸谱团(有文字,面具会压扁变形,所以去掉了文字,只保留线描脸谱)


 

二、代码展示

# -*- coding: utf-8 -*-
'''
目的:
1、京剧脸谱彩色和黑白对应,制作涂色学具 一共468张,
2、作者:阿夏
时间:2023年7月24日)

'''


import os
import os.path
import shutil
from PIL import Image


# num=int(input('生成多少份(28人)\n'))
# Number=4

print('----------第1步:提取所有的京剧脸谱的路径------------')

# 文件名
path0=[]
p0=r"C:\Users\jg2yXRZ\OneDrive\桌面\脸谱涂色\02序号脸谱无色线描PNG"
# 过滤:只保留png结尾的图片
imgs0=os.listdir(p0)
for img0 in imgs0:
    if img0.endswith(".jpeg"):
        path0.append(img0[4:-5])
# 所有图片的路径
# print(path1)
print(path0)



# 有颜色的 彩色脸谱
path1=[]
p1=r"C:\Users\jg2yXRZ\OneDrive\桌面\脸谱涂色\01序号脸谱有色彩PNG"
# 过滤:只保留png结尾的图片
imgs1=os.listdir(p1)
for img1 in imgs1:
    if img1.endswith(".jpeg"):
        path1.append(p1+'\\'+img1)
# 所有图片的路径
print(path1)
print(imgs1)

# 线描大图(截取线描图上半部分)
lu=r'C:\Users\jg2yXRZ\OneDrive\桌面\脸谱涂色\03序号脸谱无色线描(脸谱部分)'
if os.path.exists(lu):
    print("目录已存在")
else:
    print("目录不存在,创建成功")
    os.mkdir(lu)

z=[]    
pr=r'C:\Users\jg2yXRZ\OneDrive\桌面\脸谱涂色\02序号脸谱无色线描PNG'
# 过滤:只保留jpeg结尾的图片
z1=[0,0,1000,1250]
imgs=os.listdir(pr)
for img in imgs:
    if img.endswith(".jpeg"):            
        path=pr+'//'+img
        
        img1 = Image.open(path)
        region = img1.crop((0,0,1000,1250))## 0,0表示要裁剪的位置的左上角坐标,50,50表示右下角。        
        region.save(lu+'\\'+img)## 将裁剪下来的图片保存到 举例.pn


# 没有有颜色的 黑白脸谱
path2=[]
# 有颜色的

imgs2=os.listdir(lu)
for img2 in imgs2:
    if img2.endswith(".jpeg"):
        path2.append(lu+'\\'+img2)
# 所有图片的路径
print(path2)
print(imgs2)



# print('----------第2步:新建一个临时文件夹------------')
# # 新建一个”装N份word和PDF“的文件夹
os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\脸谱涂色\零时Word')


print('----------第3步:随机抽取12张图片 ------------')

import docx
from docx import Document
from docx.shared import Pt 
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
import random

import os,time
import docx
from docx import Document
from docx.shared import Inches,Cm,Pt
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn

from docxtpl import DocxTemplate
import pandas as pd
from docx2pdf import convert
from docx.shared import RGBColor


for nn in range(0,len(path2)):    
    doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\脸谱涂色\脸谱涂色小大测试.docx')
#     # 制作列表    
#     for z in range(2):        # 5行组合循环2次 每页两张表
       
    # # # 23个图形随机抽取12个
    # # figure=random.sample(path,Number)    # 12个图片随机写入4个           
    # # print(figure)
    # # 路径  ['C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\脸谱涂色\\脸谱涂色png\\08特警_3.png', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\脸谱涂色\\脸谱涂色png\\08特警_2.png', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\脸谱涂色\\脸谱涂色png\\06士兵2_1.png', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\脸谱涂色\\脸谱涂色png\\20医生_1.png']
    
    # # 提取名称
    # title=[]
    # for t in figure:
    #     tt=t[44:-6]
    #     title.append(tt)
    # # 路径  ['C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\脸谱涂色\\脸谱涂色png\\08特警_3.png', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\脸谱涂色\\脸谱涂色png\\08特警_2.png', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\脸谱涂色\\脸谱涂色png\\06士兵2_1.png', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\脸谱涂色\\脸谱涂色png\\20医生_1.png']
    # print(title)      

    table = doc.tables[0]          # 只有一个表格

    # 帖图片的单元格
    # bg1=['00','01']

    # for t1 in range(len(bg1)):   # 02
    #     pp1=int(bg1[t1][0:1])    
    #     qq1=int(bg1[t1][1:2])  
    #     # print(p)               
    #     k1=figure[t1] 

    #     print(pp1,qq1,k1)#            

    # 写入彩色图片
    run=doc.tables[0].cell(0,0).paragraphs[0].add_run()        # 在第1个表格中第2个单元格内插入国旗
    run.add_picture('{}'.format(path1[nn]),width=Cm(4.26),height=Cm(6))            # 1.5的图片最多6个
    table.cell(0,0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中  
    # 写入黑白图片
    run=doc.tables[0].cell(1,0).paragraphs[0].add_run()        # 在第1个表格中第2个单元格内插入国旗
    run.add_picture('{}'.format(path2[nn]),width=Cm(19.27),height=Cm(22))            # 1.5的图片最多6个
    table.cell(1,0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中  


    # 写入序号和生肖名称
    run=table.cell(0,1).paragraphs[0].add_run(path0[nn])    # 在单元格0,0(第1行第1列)输入第0个图图案
    run.font.name = '黑体'#输入时默认华文彩云字体
    # run.font.size = Pt(46)  #输入字体大小默认30号 换行(一页一份大卡片
    run.font.size = Pt(40)  #输入字体大小默认30号 一行里(可以一页两份)
    run.font.bold= True  #是否加粗
    run.font.color.rgb = RGBColor(0,0,0) #数字小,颜色深0-255
    # paragraph.paragraph_format.line_spacing = Pt(180) #数字段间距
    
    r = run._element
    r.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷
    table.cell(0,1).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中 

    

                
    doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\脸谱涂色\零时Word\{}.docx'.format('%02d'%nn))   
    from docx2pdf import convert

    # docx 文件另存为PDF文件
    inputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/脸谱涂色/零时Word/{}.docx".format('%02d'%nn)  # 要转换的文件:已存在
    outputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/脸谱涂色/零时Word/{}.pdf".format('%02d'%nn)  # 要生成的文件:不存在
    # 先创建 不存在的 文件
    f1 = open(outputFile, 'w')
    f1.close()
    # 再转换往PDF中写入内容
    convert(inputFile, outputFile)
    
print('----------第4步:把都有PDF合并为一个打印用PDF------------')
    
# 多个PDF合并(CSDN博主「红色小小螃蟹」,https://blog.csdn.net/yangcunbiao/article/details/125248205)
import os
from PyPDF2 import PdfFileMerger
target_path =  'C:/Users/jg2yXRZ/OneDrive/桌面/脸谱涂色/零时Word'
pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')]
pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst]
pdf_lst.sort()
file_merger = PdfFileMerger()
for pdf in pdf_lst:
    print(pdf)
    file_merger.append(pdf)
file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/脸谱涂色/(打印合集)脸谱涂色线描稿竖版2.0(共{}份).pdf".format(len(path2)))

file_merger.close()
# doc.Close()



# # # print('----------第5步:删除临时文件夹------------')    
import shutil
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/脸谱涂色/零时Word') #递归删除文件夹,即:删除非空文件夹


三、终端运行

不用参数,直接运行,468张要运行很长时间

四、材料打印

目测选择一些涂色面积大的脸谱,一些细节琐碎的脸谱不能打印绘画——因为蜡笔涂色效果不如水彩笔,但幼儿园里只有人手一套的12色蜡笔。

教学过程:

时间:2023年9月20日 9:13-10:15

班级:大4

人数:28人

要求:不是随便涂色,要和左上角的彩图颜色一样。也是对称涂色

绘画过程中,有一组的孩子对面具人物感兴趣了,纷纷询问:

“老师,我的面具是谁?”

“那我这个是什么?”

“哈哈,我拿到齐天大圣孙悟空,我运气真好”

“我这个是龙王!”

……很多脸谱人物,我也不清楚背景,除了报一个名字和京剧名称,就鼓励孩子们

“把小彩图和文字剪下来,贴在面具反面,回去问问家长,这是谁的脸谱,是哪个故事里”。

感悟:

1、不同的造型,激发幼儿探究兴趣。

2、部分面具需要大块面涂色,幼儿涂色时间很长。所以速度不均。

3、纸条黏贴的面具依旧不牢,无法反复佩戴脱下。

END

中午一起来玩纸条吧

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大语言模型之十二 SentencePiece扩充LLama2中文词汇

大语言模型的发展潜力已经毋庸置疑了,如何让中文大语言模型更适合中小公司使用这是一道难题。在模型的选择上我们倾向于选择国外的LLama或者BLoom之类的,而不是百川之类的中文大模型,原因在于从基建到框架到数据国外的开源资料非常多&#xf…

背诵不等于理解,深度解析大模型背后的知识储存与提取

自然语言模型的背诵 (memorization) 并不等于理解。即使模型能完整记住所有数据,也可能无法通过微调 (finetune) 提取这些知识,无法回答简单的问题。 随着模型规模的增大,人们开始探索大模型是如何掌握大量知识的。一种观点认为这归功于 “无…

国庆共68条评论《乡村振兴战略下传统村落文化旅游旅游设计》许少辉八一新书

国庆共68条评论《乡村振兴战略下传统村落文化旅游旅游设计》许少辉八一新书 国庆共68条评论《乡村振兴战略下传统村落文化旅游旅游设计》许少辉八一新书

【STM32】IAP升级03关闭总中断,检测栈顶指针

IAP升级方法 IAP升级时需要关闭总中断 TM32在使用时有时需要禁用全局中断,比如MCU在升级过程中需禁用外部中断,防止升级过程中外部中断触发导致升级失败。 ARM MDK中提供了如下两个接口来禁用和开启总中断: __disable_irq(); // 关闭总中…

函数指针详解和简单使用

概念 函数指针&#xff1a;首先它是一个指针&#xff0c;一个指向函数的指针&#xff0c;在内存空间中存放的是函数的地址&#xff1b; 引入 #include <stdio.h>void test() {printf("hehe\n"); } int main() {printf("%p\n", test);printf(&quo…

基于 SpringBoot+Vue 的大学生租房网站

1 简介 本大学生租房系统使用简洁的框架结构&#xff0c;专门用于用户浏览首页&#xff0c;房屋信息&#xff0c;房屋评价&#xff0c;公告资讯&#xff0c;个人中心&#xff0c;后台管理&#xff0c;意见反馈等信息&#xff0c;对个人信息进行修改等&#xff0c;以及系统管理…

基于Java的大学生就业招聘系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

Java基础---第十篇

系列文章目录 文章目录 系列文章目录一、说说Java 中 IO 流二、 Java IO与 NIO的区别(补充)三、java反射的作用于原理一、说说Java 中 IO 流 Java 中 IO 流分为几种? 按照流的流向分,可以分为输入流和输出流; 按照操作单元划分,可以划分为字节流和字符流; 按照流的角色…

【笔试强训day02】倒置字符串 排序子序列

​&#x1f47b;内容专栏&#xff1a; 笔试强训集锦 &#x1f428;本文概括&#xff1a;C笔试强训day02。 &#x1f43c;本文作者&#xff1a; 阿四啊 &#x1f438;发布时间&#xff1a;2023.10.1 二、day02 1.倒置字符串 题目描述&#xff1a; 将一句话的单词进行倒置&…

工厂模式和单例模式

目录 一.设计模式 二.工厂模式和单例模式 &#x1f41e;单例模式 1.饿汉模式 2.懒汉模式 &#xff08;1&#xff09;问题一&#xff1a;大量对象的创建 &#xff08;2&#xff09;问题二&#xff1a;加锁导致阻塞等待 &#xff08;3&#xff09;问题三&#xff1a;指令…

MySql进阶篇---006:存储引擎,索引,SQL优化,视图、存储过程、变量、流程控制、游标、存储函数、触发器

1. 存储引擎 1.1 MySQL体系结构 1).连接层 最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念&#xff0c;为通过认证…

【面试经典150 | 矩阵】螺旋矩阵

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;模拟方法二&#xff1a;按层模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于…

04. Springboot集成Mybatis-flex(二)

1、前言 上一篇文章《Springboot集成Mybatis-flex&#xff08;一&#xff09;》提到Mybatis Flex和Spring Boot的初步集成和基础使用。今天我们再来探索Mybatis Flex其他特性的使用。 2、数据填充 数据填充指的是&#xff0c;当 Entity 数据被插入 或者 更新的时候&#xff…

Ghostscript 字体处理深究: 解决字体缺失问题

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Hello World!1分钟配置好你的Go环境

目录 一、简介为什么选择Golang&#xff1f;Golang与其他语言的对比核心特性应用场景社区和生态系统性能标准企业级应用 二、环境要求操作系统WindowsLinux/UnixmacOS 硬件需求其他依赖软件异常情况和处理方法 三、下载和安装GolangWindows系统使用官方安装包使用Chocolatey&am…

使用CreateProcess崩溃:处未处理的异常: 0xC0000005: 写入位置 0x00415652 时发生访问冲突

问题代码 if (!CreateProcess(NULL,L"pela.exe",NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)){return 0;}如果CreateProcess的第二个参数字符串是常量或者是储存在堆中的就会被写保护&#xff0c;崩溃。如果字符串定义到栈或者全局变量就不存在此问题了。 正确的…

初级篇—第二章SELECT查询语句

文章目录 什么是SQLSQL 分类SQL语言的规则与规范阿里巴巴MySQL命名规范数据导入指令 显示表结构 DESC基本的SELECT语句SELECTSELECT ... FROM列的别名 AS去除重复行 DISTINCT空值参与运算着重号查询常数过滤数据 WHERE练习 运算符算术运算符加减符号乘除符号取模符号 符号比较运…

SNERT预备队招新CTF体验赛-Misc(SWCTF)

目录 1、最简单的隐写 2、旋转我 3、is_here 4、zip伪加密 5、压缩包密码爆破 6、我就藏在照片里 7、所以我放弃了bk 8、套娃 9、来自银河的信号 10、Track_Me 11、勇师傅的奇思妙想 1、最简单的隐写 下载附件后&#xff0c;图片格式并不支持打开 根据题目提示&…

Window 安装多个版本的 java 并按需切换

1、按需下载对应版本的 java 官网链接&#xff1a;Java Downloads | Oracle 2、执行安装程序&#xff0c;根据安装向导一步一步走就行&#xff0c;每个版本安装在不同的目录下。 3、配置环境变量 a&#xff09;为每个版本 java 新建不同名称的 JAVA_HOME 系统变量&#xff0…

最优化:建模、算法与理论(最优性理论

第五章 最优性理论 在实际中最优化问题的形式多种多样&#xff0c;给定一类具体的优化问题&#xff0c;我们首先需要分析其解的存在性。如果优化问题的解存在&#xff0c;再考虑如何设计算法求出最优解&#xff0c;一般的非凸优化问题可能存在很多局部极小解&#xff0c;但其往…