• 【教学类-18-01】20221123《蒙德里安红黄蓝格子画》(大班)


     效果展示:

    单页效果

     多页效果

     预设效果

    背景需求:

    2022年11月23日,作为艺术特色幼儿园,蒙德里安风格装饰在我们幼儿园的环境中。

    蒙德里安是几何抽象画派的先驱,以几何图形为绘画的基本元素,与德士堡等创立了“风格派”,提倡自己的艺术“新造型主义”。他认为艺术应根本脱离自然的外在形式,以表现抽象精神为目的,追求人与神统一的绝对境界,也就是现在我们熟知的“纯粹抽象”。

    《大块红色、黄色、黑色、灰色和蓝色的构成》布面油画1921达拉斯艺术博物馆藏

    以前指导孩子们临摹过上面这幅画,孩子们画的还不错。这次我想随机生成一些不同的线条框架,让幼儿根据不同的线条组成的大小块面,自行尝试填色(色彩涂色符合幼儿的绘画能力特点)。

    制作随机线条画有点难度,我参考了很多CSDN上的“蒙德里安”代码,要么看不懂,要么不符合我的需求。最终找到了“https://blog.csdn.net/qq_45027465/article/details/125315445”(随机绘画图形)的代码,通过反复测试,修改参数,基本满足了我需要的黑线格子样式。  

     WORD模板设置

    (从实际操作角度来看,横板样式,不利于幼儿书写个人信息,而且word模板制作要插入大量的形状几何形及文本框、分栏、表格等,设置非常复杂。

    因此采用竖版的,见【教学类-18-02】20221124《蒙德里安红黄蓝格子画-A4竖版》(大班),这里就不详细说明版面的各类尺寸。

    使用python随机画几何图形(矩形、圆形、三角形...)_python随机画1个图形或方形-CSDN博客使用Python随机生成几何图形,可以节省绘制大量图像的时间。可通过opencv或turtle库进行实现,生成随机颜色的背景和图形。结果可用作数据集,实验参数可根据需求调整。https://blog.csdn.net/qq_45027465/article/details/125315445

    运行代码:

    1. '''
    2. 作者:阿夏
    3. 时间:2022年11月23日蒙德里安“红黄蓝黑格子画-横版)
    4. (A4横版,左边第一个18*18的蒙德里安图片))
    5. '''
    6. # 代码出处:https://blog.csdn.net/qq_45027465/article/details/125315445
    7. import matplotlib.pyplot as plt
    8. import matplotlib.patches as pch
    9. import matplotlib.tri as tri
    10. import numpy as np
    11. import random
    12. from cv2 import cv2
    13. import os
    14. import gc
    15. print('-----------------第1部分:生成蒙德里安线正方形线条图-------------------')
    16. n=int(input('请输入画布尺寸正方形(18Cm)\n'))
    17. nn=int(input('一共要几张图(30)\n'))
    18. figLong = n # 的长k
    19. figWide = n # 的宽
    20. color = ['b', 'r', 'g', 'y', 'c', 'm','w','k']# 蓝色,红色、绿色、黄色、青、品红、白、黑
    21. def FigRect(ax,num): # 画矩形
    22. # 以下代码是做随机矩形。
    23. for i in range(num):
    24. # l=figLong
    25. # w=figWide
    26. long = random.uniform(figLong,figLong*5) # 矩形的长为0.5-3之间
    27. wide = random.uniform(figWide,figWide*5) #
    28. X = random.uniform(0, figLong - long)
    29. Y = random.uniform(0, figWide - wide)
    30. # X =figLong - long
    31. # Y =figWide - wide
    32. a = random.randint(7, 7) # 0,0蓝色 11红 22绿 33黄 44浅蓝、55浅紫 66白 77黑 # 线条色彩,这里只用7,黑色
    33. rect = pch.Rectangle(xy=(X, Y), width=wide, height=long, edgecolor=color[a], facecolor=color[a], fill=False,
    34. linewidth=20) # 线条宽度
    35. ax.add_patch(rect)
    36. # 下面代码是做画框的边框(18*18)
    37. rect1 = pch.Rectangle(xy=(0, 0), width=figWide, height=figLong, edgecolor=color[a], facecolor=color[a], fill=False,
    38. linewidth=20) # 线条宽度
    39. ax.add_patch(rect1)
    40. if num != 0:
    41. del ax, rect
    42. gc.collect()
    43. def main():
    44. figNum = nn # 画图数量
    45. imgNum = 80 # 每张图的图形最多数量
    46. for i in range(figNum):
    47. fig, ax = plt.subplots(figsize=(figLong, figWide))
    48. a = random.randint(1, 1)# 0,0=黑色背景 1,1白色背景
    49. if a == 0:
    50. X = np.arange(0, figLong, 20)
    51. plt.fill_between(X, 0, figWide, color='k')
    52. for j in range(0,imgNum):
    53. b = random.randint(0, 0)
    54. # b=3
    55. if b==0:
    56. FigRect(ax, 1) # 图形粗密
    57. name = 'C:/Users/jg2yXRZ/OneDrive/桌面/蒙德里安/线条图/' + str(i) + '.jpg'
    58. plt.xlim(xmin=0, xmax=figLong)
    59. plt.ylim(ymin=0, ymax=figWide)
    60. plt.axis('off')
    61. plt.subplots_adjust(top=1, bottom=0, left=0, right=1, hspace=0, wspace=0)
    62. plt.margins(0, 0)
    63. plt.savefig(name, dpi=30)
    64. # plt.show() # 只显示一次,并且不能自动关闭
    65. plt.clf()
    66. plt.close()
    67. del fig, ax
    68. gc.collect()
    69. # 模拟按键Alt+F4
    70. # plt.pause(1)
    71. if __name__ == '__main__':
    72. main()
    73. print('-----------------第2部分:导入Word,合成PDF-------------------')
    74. import os,random
    75. print('----------第1步:提取所有的蒙德里安线条图的路径------------')
    76. path=[]
    77. for i in range(0,nn): # 一共有18张
    78. p=r"C:\Users\jg2yXRZ\OneDrive\桌面\蒙德里安\线条图\{}.jpg".format(i)
    79. path.append(p)
    80. print(path)
    81. # ['C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\1.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\2.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\3.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\4.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\5.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\七巧
    82. # 板\\线条图\\6.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\7.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\8.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\9.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\10.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\11.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\12.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\13.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\14.jpg',
    83. # 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\15.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\16.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图
    84. # \\17.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\18.jpg']
    85. print('----------第2步:新建一个临时文件夹------------')
    86. # 新建一个”装N份word和PDF“的文件夹
    87. os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\蒙德里安\零时Word')
    88. print('----------第3步:把30个图片分别插入30个Word内 ------------')
    89. from win32com.client import constants,gencache
    90. from win32com.client.gencache import EnsureDispatch
    91. from win32com.client import constants # 导入枚举常数模块
    92. import os,time
    93. import docx
    94. from docx import Document
    95. from docx.shared import Inches,Cm,Pt
    96. from docx.shared import RGBColor
    97. from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
    98. from docx.oxml.ns import qn
    99. from docxtpl import DocxTemplate
    100. import pandas as pd
    101. from docx2pdf import convert
    102. from docx.shared import RGBColor
    103. for nnn in range(0,len(path)):
    104. # word = gencache.EnsureDispatch('Word.Application')
    105. doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\蒙德里安\蒙德里安模板.docx')# 打开带docx模板(这个模板有页脚的页码,阿夏认为页码是必须的)
    106. table = doc.tables[0] # 一共有1个表格
    107. # for t in : # 图案的长度为8*4=32个 遍历0-32(32个)
    108. k=path[nnn] # 提取list图案列表里面每个图形 t=索引数字
    109. print(k)
    110. run=doc.tables[0].cell(0,0).paragraphs[0].add_run() # 在第一个表格中的每个单元格的第一行插入信息
    111. run.add_picture('{}'.format(k),width=Cm(18),height=Cm(18))
    112. # 插入,k=所在路径。单元格大小有限,每张原始尺寸8.744CM,插入的大小最多4CM
    113. table.cell(0,0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中
    114. # doc.Save()# 把有空格的1.docx保存n
    115. doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\蒙德里安\零时Word\{}.docx'.format('%02d'%nnn))
    116. from docx2pdf import convert
    117. # docx 文件另存为PDF文件
    118. inputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/蒙德里安/零时Word/{}.docx".format('%02d'%nnn) # 要转换的文件:已存在
    119. outputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/蒙德里安/零时Word/{}.pdf".format('%02d'%nnn) # 要生成的文件:不存在
    120. # 先创建 不存在的 文件
    121. f1 = open(outputFile, 'w')
    122. f1.close()
    123. # 再转换往PDF中写入内容
    124. convert(inputFile, outputFile)
    125. print('----------第4步:把都有PDF合并为一个打印用PDF------------')
    126. # 多个PDF合并(CSDN博主「红色小小螃蟹」,https://blog.csdn.net/yangcunbiao/article/details/125248205)
    127. import os
    128. from PyPDF2 import PdfFileMerger
    129. target_path = 'C:/Users/jg2yXRZ/OneDrive/桌面/蒙德里安/零时Word'
    130. pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')]
    131. pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst]
    132. pdf_lst.sort()
    133. file_merger = PdfFileMerger()
    134. for pdf in pdf_lst:
    135. print(pdf)
    136. file_merger.append(pdf)
    137. file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/蒙德里安/(打印合集)纯色蒙德里安({}份).pdf".format(nn))
    138. file_merger.close()
    139. # doc.Close()
    140. # print('----------第5步:删除临时文件夹------------')
    141. import shutil
    142. shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/蒙德里安/零时Word') #递归删除文件夹,即:删除非空文件夹

    重点说明

    1、运行参数

     2、运行过程:

      

     3、重要设置:

    如何大量随机出现的长方形线条(有些参数的意思我也不太理解)

     

     把图片导入Word

     

     效果再展示:

    感悟:

    1、终于实现了随机生成矩形画的效果!O(∩_∩)O~~

    2、横版的视觉效果看,三角撑纸片竖排显示,幼儿需要先剪下来,然后再书写。先剪后写,容易零件散乱。

    (2022年11月24日,突然发现横版不影响幼儿书写,因为横版的样式打印后,幼儿完全可以竖着摆放纸张=逆时针旋转90度,同样可以先写个人信息,涂三种颜色色卡,然后再画下面的格子画)

           3、最好能把板面内容竖起来,第一行格子是个人信息,第二个格子是格子画。(详见教学类-18-02)(横版竖版打印出来的差异不大,唯一的不同就是横版中需要插入大量形状,并且要垂直文字,做起来稍微一点复杂。相对而言,竖版中插入的形状比较少,书写的文字都是水平的,更符合视觉规律)

    横版:

     竖版

     所以实际教学中,还是用【教学类-18-02】20221124《蒙德里安”红黄蓝黑格子画“-A4竖版》的代码吧

  • 相关阅读:
    NIO 笔记(二)Netty框架专题
    用例图包含关系、扩展关系、泛化关系解析(最全总结,非常详细)
    携职教育:2022年初级会计成绩查询倒计时,这几件事一定要注意
    Python程序员:代码写的好,丝滑的壁纸少不了
    Appium自动化测试:通过appium的inspector功能无法启动app的原因
    批量将excel表格数据导入word中-邮件合并法
    Hololens2代码控制手部网格、手部关节、手部射线、性能面板的显示状态
    5 个让日常编码更简单的 Python 库
    【已解决】记录Vue2.x中npm install下载依赖报错:python2 Error: not found: python2问题(具体操作步骤)
    C++ Reference: Standard C++ Library reference: C Library: cmath: copysign
  • 原文地址:https://blog.csdn.net/reasonsummer/article/details/128008692