单页效果

多页效果

预设效果

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

《大块红色、黄色、黑色、灰色和蓝色的构成》布面油画1921达拉斯艺术博物馆藏
以前指导孩子们临摹过上面这幅画,孩子们画的还不错。这次我想随机生成一些不同的线条框架,让幼儿根据不同的线条组成的大小块面,自行尝试填色(色彩涂色符合幼儿的绘画能力特点)。
制作随机线条画有点难度,我参考了很多CSDN上的“蒙德里安”代码,要么看不懂,要么不符合我的需求。最终找到了“https://blog.csdn.net/qq_45027465/article/details/125315445”(随机绘画图形)的代码,通过反复测试,修改参数,基本满足了我需要的黑线格子样式。
(从实际操作角度来看,横板样式,不利于幼儿书写个人信息,而且word模板制作要插入大量的形状几何形及文本框、分栏、表格等,设置非常复杂。
因此采用竖版的,见【教学类-18-02】20221124《蒙德里安红黄蓝格子画-A4竖版》(大班),这里就不详细说明版面的各类尺寸。
- '''
- 作者:阿夏
- 时间:2022年11月23日蒙德里安“红黄蓝黑格子画-横版)
- (A4横版,左边第一个18*18的蒙德里安图片))
- '''
-
-
- # 代码出处:https://blog.csdn.net/qq_45027465/article/details/125315445
- import matplotlib.pyplot as plt
- import matplotlib.patches as pch
- import matplotlib.tri as tri
- import numpy as np
- import random
- from cv2 import cv2
- import os
- import gc
-
- print('-----------------第1部分:生成蒙德里安线正方形线条图-------------------')
-
- n=int(input('请输入画布尺寸正方形(18Cm)\n'))
- nn=int(input('一共要几张图(30)\n'))
- figLong = n # 的长k
- figWide = n # 的宽
-
- color = ['b', 'r', 'g', 'y', 'c', 'm','w','k']# 蓝色,红色、绿色、黄色、青、品红、白、黑
-
- def FigRect(ax,num): # 画矩形
- # 以下代码是做随机矩形。
- for i in range(num):
- # l=figLong
- # w=figWide
- long = random.uniform(figLong,figLong*5) # 矩形的长为0.5-3之间
- wide = random.uniform(figWide,figWide*5) #
- X = random.uniform(0, figLong - long)
- Y = random.uniform(0, figWide - wide)
- # X =figLong - long
- # Y =figWide - wide
- a = random.randint(7, 7) # 0,0蓝色 11红 22绿 33黄 44浅蓝、55浅紫 66白 77黑 # 线条色彩,这里只用7,黑色
- rect = pch.Rectangle(xy=(X, Y), width=wide, height=long, edgecolor=color[a], facecolor=color[a], fill=False,
- linewidth=20) # 线条宽度
- ax.add_patch(rect)
-
- # 下面代码是做画框的边框(18*18)
- rect1 = pch.Rectangle(xy=(0, 0), width=figWide, height=figLong, edgecolor=color[a], facecolor=color[a], fill=False,
- linewidth=20) # 线条宽度
- ax.add_patch(rect1)
-
- if num != 0:
- del ax, rect
- gc.collect()
-
- def main():
- figNum = nn # 画图数量
- imgNum = 80 # 每张图的图形最多数量
- for i in range(figNum):
- fig, ax = plt.subplots(figsize=(figLong, figWide))
- a = random.randint(1, 1)# 0,0=黑色背景 1,1白色背景
-
- if a == 0:
- X = np.arange(0, figLong, 20)
- plt.fill_between(X, 0, figWide, color='k')
- for j in range(0,imgNum):
- b = random.randint(0, 0)
- # b=3
- if b==0:
- FigRect(ax, 1) # 图形粗密
-
-
- name = 'C:/Users/jg2yXRZ/OneDrive/桌面/蒙德里安/线条图/' + str(i) + '.jpg'
- plt.xlim(xmin=0, xmax=figLong)
- plt.ylim(ymin=0, ymax=figWide)
- plt.axis('off')
- plt.subplots_adjust(top=1, bottom=0, left=0, right=1, hspace=0, wspace=0)
- plt.margins(0, 0)
- plt.savefig(name, dpi=30)
- # plt.show() # 只显示一次,并且不能自动关闭
- plt.clf()
- plt.close()
-
- del fig, ax
- gc.collect()
-
- # 模拟按键Alt+F4
- # plt.pause(1)
-
- if __name__ == '__main__':
- main()
-
-
- print('-----------------第2部分:导入Word,合成PDF-------------------')
-
- import os,random
- print('----------第1步:提取所有的蒙德里安线条图的路径------------')
-
- path=[]
- for i in range(0,nn): # 一共有18张
- p=r"C:\Users\jg2yXRZ\OneDrive\桌面\蒙德里安\线条图\{}.jpg".format(i)
- path.append(p)
- print(path)
- # ['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\\桌面\\七巧
- # 板\\线条图\\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',
- # 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\15.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\16.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图
- # \\17.jpg', 'C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\蒙德里安\\线条图\\18.jpg']
-
-
-
- print('----------第2步:新建一个临时文件夹------------')
- # 新建一个”装N份word和PDF“的文件夹
- os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\蒙德里安\零时Word')
-
-
- print('----------第3步:把30个图片分别插入30个Word内 ------------')
-
- from win32com.client import constants,gencache
- from win32com.client.gencache import EnsureDispatch
- from win32com.client import constants # 导入枚举常数模块
- 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 nnn in range(0,len(path)):
- # word = gencache.EnsureDispatch('Word.Application')
- doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\蒙德里安\蒙德里安模板.docx')# 打开带docx模板(这个模板有页脚的页码,阿夏认为页码是必须的)
-
- table = doc.tables[0] # 一共有1个表格
-
- # for t in : # 图案的长度为8*4=32个 遍历0-32(32个)
-
- k=path[nnn] # 提取list图案列表里面每个图形 t=索引数字
- print(k)
-
- run=doc.tables[0].cell(0,0).paragraphs[0].add_run() # 在第一个表格中的每个单元格的第一行插入信息
- run.add_picture('{}'.format(k),width=Cm(18),height=Cm(18))
- # 插入,k=所在路径。单元格大小有限,每张原始尺寸8.744CM,插入的大小最多4CM
-
- table.cell(0,0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中
-
- # doc.Save()# 把有空格的1.docx保存n
- doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\蒙德里安\零时Word\{}.docx'.format('%02d'%nnn))
- from docx2pdf import convert
-
- # docx 文件另存为PDF文件
- inputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/蒙德里安/零时Word/{}.docx".format('%02d'%nnn) # 要转换的文件:已存在
- outputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/蒙德里安/零时Word/{}.pdf".format('%02d'%nnn) # 要生成的文件:不存在
- # 先创建 不存在的 文件
- 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(nn))
- file_merger.close()
- # doc.Close()
-
- # print('----------第5步:删除临时文件夹------------')
- import shutil
- shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/蒙德里安/零时Word') #递归删除文件夹,即:删除非空文件夹
-


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


把图片导入Word



1、终于实现了随机生成矩形画的效果!O(∩_∩)O~~
2、横版的视觉效果看,三角撑纸片竖排显示,幼儿需要先剪下来,然后再书写。先剪后写,容易零件散乱。
(2022年11月24日,突然发现横版不影响幼儿书写,因为横版的样式打印后,幼儿完全可以竖着摆放纸张=逆时针旋转90度,同样可以先写个人信息,涂三种颜色色卡,然后再画下面的格子画)
3、最好能把板面内容竖起来,第一行格子是个人信息,第二个格子是格子画。(详见教学类-18-02)(横版竖版打印出来的差异不大,唯一的不同就是横版中需要插入大量形状,并且要垂直文字,做起来稍微一点复杂。相对而言,竖版中插入的形状比较少,书写的文字都是水平的,更符合视觉规律)
横版:

竖版
