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

本文主要是介绍【教学类-38-01】20230724京剧脸谱1.0——横版“彩图线图等大”(Python 彩图彩照转素描线描稿),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、作品预览

京剧脸谱(涂色)学具展示(64份)

 

二、背景需求:

1、大班主题《我是中国人》里面有一个“京剧脸谱”的子主题。从网上下载的彩色脸谱(红黄绿蓝紫黑白),作为环境装饰。引导幼儿了解“脸谱色彩和人物性格”。

2、2023年9月开始幼儿园购买“梨园梦”的体验课程,6月培训课中,导师展示了幼儿照着范例在“京剧脸谱线描稿”上涂色的 一款学具,当时听到同事私语:“这一本也就几个人物能涂色,不够画啊!”

3、由于不确定是一班一套,还是每个孩子人手一套。所以我很想为孩子提供更多数量的“脸谱涂色”材料,作为个别化美工区学习材料。

4、网上有大量的彩色京剧脸谱彩色图案,也有少量的黑白线描脸谱,但是很难找到一套“有彩图又有线描稿的脸谱”,大部分线描稿京剧脸谱需要到淘宝购买。同时大部分脸谱没有备注,我也不知道它是哪位京剧人物,出自那一部京剧。

三、解决策略:

通过百度图片,搜索到“堆糖”上的一套京剧脸谱,不仅有人物名字和京剧名称,而且数量众多(实际下载468张), 

脸谱人物名字和京剧名称的文字附在脸谱图片上

 把467张脸谱下载(使用UIBOT,放大图片,读取“图片上的文字信息”,另存为“三位数序号+人物名字+京剧名称.jpeg

(文字识别度有误差,全部下载后,还需要对着脸谱图片上的文字手动修改图片的文件名字,有几个生僻字还需要网络搜搜读音)

(花了2天才全部下载完,调整号名字)

 四、素材准备:

彩色脸谱

 线描脸谱(空)

 五:“彩图 转 线描图”的代码展示

# https://blog.csdn.net/weixin_44421798/article/details/113027414?ops_request_misc=&request_id=&biz_id=102&utm_term=Python%EF%BC%8C%E7%85%A7%E7%89%87%E4%B8%80%E9%83%A8%E5%88%86%E6%8F%8F%E8%BE%B9&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-113027414.142^v90^control_2,239^v3^insert_chatgpt&spm=1018.2226.3001.4187'''将彩色脸谱转化为线描脸谱(黑白线条)'''from PIL import Image
import osimport os
from PIL import Image pathall=[]
p=r"C:\Users\jg2yXRZ\OneDrive\桌面\脸谱涂色\01序号脸谱有色彩PNG"
# 过滤:只保留png结尾的图片
imgs=os.listdir(p)
for img in imgs:if img.endswith(".jpeg"):pathall.append(p+'\\'+img)
# 所有图片的路径
print(pathall)
print(imgs)for dz in range(len(pathall)):# 图像组成:红绿蓝  (RGB)三原色组成    亮度(255,255,255)image =pathall[dz]img = Image.open(image)new = Image.new("L", img.size, 255)width, height = img.sizeimg = img.convert("L")# 定义画笔的大小Pen_size = 3# 色差扩散器Color_Diff = 6for i in range(Pen_size + 1, width - Pen_size - 1):for j in range(Pen_size + 1, height - Pen_size - 1):# 原始的颜色originalColor = 255lcolor = sum([img.getpixel((i - r, j)) for r in range(Pen_size)]) // Pen_sizercolor = sum([img.getpixel((i + r, j)) for r in range(Pen_size)]) // Pen_size# 通道----颜料if abs(lcolor - rcolor) > Color_Diff:originalColor -= (255 - img.getpixel((i, j))) // 4new.putpixel((i, j), originalColor)ucolor = sum([img.getpixel((i, j - r)) for r in range(Pen_size)]) // Pen_sizedcolor = sum([img.getpixel((i, j + r)) for r in range(Pen_size)]) // Pen_size# 通道----颜料if abs(ucolor - dcolor) > Color_Diff:originalColor -= (255 - img.getpixel((i, j))) // 4new.putpixel((i, j), originalColor)acolor = sum([img.getpixel((i - r, j - r)) for r in range(Pen_size)]) // Pen_sizebcolor = sum([img.getpixel((i + r, j + r)) for r in range(Pen_size)]) // Pen_size# 通道----颜料if abs(acolor - bcolor) > Color_Diff:originalColor -= (255 - img.getpixel((i, j))) // 4new.putpixel((i, j), originalColor)qcolor = sum([img.getpixel((i + r, j - r)) for r in range(Pen_size)]) // Pen_sizewcolor = sum([img.getpixel((i - r, j + r)) for r in range(Pen_size)]) // Pen_size# 通道----颜料if abs(qcolor - wcolor) > Color_Diff:originalColor -= (255 - img.getpixel((i, j))) // 4new.putpixel((i, j), originalColor)new.save(r"C:\Users\jg2yXRZ\OneDrive\桌面\脸谱涂色\02序号脸谱无色线描PNG\{}".format(imgs[dz]))# i = os.system('mshta vbscript createobject("sapi.spvoice").speak("%s")(window.close)' % '您的图片转换好了')# os.system(img_save)

终端展示

说明: 转换比较慢:

(1)一张彩色脸谱转线描脸谱的转换时间:37秒

(2) 预计:268张用时2小时45分16秒(2023年7月24日18:00:00-20:45:16)

(3)实际:2023年7月24日

18点00分—21点19分:下载149张

18点00分—23点09分:下载306张

 

 

(中间中断15分钟,实际运行速度不都是37秒一张)

太晚了,明天继续下载

(4)实际:2023年7月25日

8点07分—11点54分:编号306开始,下载167张(共473张)

 

 

 

 

 

说明:因为要检测图案中色块与色块的边缘线条(色差检测)并补充黑灰线条(线描),所以彩色图片转换线描稿非常费时,尽量不要用几百张图片转换。

六、代码选择的特别说明:

我需要涂色脸谱,前期测试“消除彩色”、“黑白灰”的两个代码(运行速度很快),效果不佳,因在第三次选择了“彩图转素描的代码”(色块边缘线检测线条,所以费时)

测试1:“图案去除彩色”

结果:图案保留了所有含黑色的线条、块面,不是黑色的轮廓线也消失了

测试2:“图案转(黑白)灰色”

结果:脸谱外形保留,出现没有彩色的黑白灰效果。但能够涂色的地方也都被黑色、灰色覆盖,不仅涂不了颜色,打印起来也浪费墨水。

测试3(最终效果):“图案转素描(线描)”

结果:脸谱保留所有的线条(描边3磅),而且深色块面颜色也被清除了,完全符合块面涂色的需求!

 七、制作脸谱学具:

材料准备:

  图片 文件夹1

  图片 文件夹2 

 彩色脸谱的数量和线描脸谱的数量要一致(468张),制作学具时,需要按编号一一对应。

WORD模板

“彩色脸谱+线描脸谱”组合学具的代码展示:

# -*- coding: utf-8 -*-
'''
目的:
1、京剧脸谱彩色和黑白对应,制作涂色学具 一共468张,
2、作者:阿夏
时间:2023年7月24日)'''import os# num=int(input('生成多少份(28人)\n'))
# Number=4print('----------第1步:提取所有的京剧脸谱的路径------------')# 有颜色的 彩色脸谱
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)# 没有有颜色的 黑白脸谱
path2=[]
# 有颜色的
p2=r"C:\Users\jg2yXRZ\OneDrive\桌面\脸谱涂色\02序号脸谱无色线描PNG"
# 过滤:只保留png结尾的图片
imgs2=os.listdir(p2)
for img2 in imgs2:if img2.endswith(".jpeg"):path2.append(p2+'\\'+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 randomimport 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 qnfrom docxtpl import DocxTemplate
import pandas as pd
from docx2pdf import convert
from docx.shared import RGBColorfor 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(14.04),height=Cm(19.2))            # 1.5的图片最多6个table.cell(0,0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中  # 写入黑白图片run=doc.tables[0].cell(0,1).paragraphs[0].add_run()        # 在第1个表格中第2个单元格内插入国旗run.add_picture('{}'.format(path2[nn]),width=Cm(14.04),height=Cm(19.2))            # 1.5的图片最多6个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/桌面/脸谱涂色/(打印合集)脸谱涂色线描稿(共{}份).pdf".format(len(path2)))file_merger.close()
# doc.Close()# # # print('----------第5步:删除临时文件夹------------')    
import shutil
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/脸谱涂色/零时Word') #递归删除文件夹,即:删除非空文件夹

终端演示:(彩图片转换线描太慢了,先做64个图片) 

 "零时文件夹"里的图片,逐步生成word和PDF,最后合并PDF,并自动删除“零时文件夹”

 

 

 作品展示:

PDF学具(A4横版)

左右两个图案是一样的(有颜色和没有颜色,便于幼儿涂色,最好用水彩笔,但是实际情况只有“米罗可儿12色粗蜡笔",所以“468份脸谱合并的PDF”在打印时,教师最好有意识挑选一些涂色块面大、脸谱色彩能对应12色蜡笔(有这种颜色的蜡笔)的脸谱图案——打印当前页。凑满30份。)

视频GIF:京剧脸谱(涂色)学具展示(64份)

 

花了两天时间,才把473张脸谱转成线描,然后生成PDF

从2023年7月25日12点14分,一直生成到13:00分,46分钟才跑完

 

感悟:

1、有了”照片/简笔画彩图 转 线描素描稿”的代码后,就可以将更多的彩色简笔画图片转为线稿,从而为幼儿提供涂色类学具。、

2、对称的线稿图片,还可以用切割代码切除右边部分,让幼儿尝试画对称图案。

3、线稿图片,切割N*N块,进行拼图。

教学测试:

一、彩色面积大,效用低

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

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

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

二、面具使用,有点小

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

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

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

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

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

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

这篇关于【教学类-38-01】20230724京剧脸谱1.0——横版“彩图线图等大”(Python 彩图彩照转素描线描稿)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/318707

相关文章

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型: