效果展示:
单页效果
多页效果
预设效果
背景需求:
2022年11月23日,作为艺术特色幼儿园,蒙德里安风格装饰在我们幼儿园的环境中。
蒙德里安是几何抽象画派的先驱,以几何图形为绘画的基本元素,与德士堡等创立了“风格派”,提倡自己的艺术“新造型主义”。他认为艺术应根本脱离自然的外在形式,以表现抽象精神为目的,追求人与神统一的绝对境界,也就是现在我们熟知的“纯粹抽象”。
《大块红色、黄色、黑色、灰色和蓝色的构成》布面油画1921达拉斯艺术博物馆藏
以前指导孩子们临摹过上面这幅画,孩子们画的还不错。这次我想随机生成一些不同的线条框架,让幼儿根据不同的线条组成的大小块面,自行尝试填色(色彩涂色符合幼儿的绘画能力特点)。
制作随机线条画有点难度,我参考了很多CSDN上的“蒙德里安的梦想”“蒙德里安多位K”代码,要么看不懂代码写了什么意思,要么Python VScode不能运行、要么就是效果不符合我的需求。
最终找到了“https://blog.csdn.net/qq_45027465/article/details/125315445”(随机绘画图形)的代码,通过反复测试,修改参数,基本满足了我需要的黑线格子样式。
WORD模板设置
Word位置
页边距:上下左右0.7
纸张方向:竖版
插入第一个表格 1行*4列,其中左侧三个单元格的大小:高度8.6*宽度6.13
设置表格的框线
第一个表格和第二个表格之间要有一个空行:空行的字体大小间距设置
蒙德里安线条图
画框外框线的设置(加粗框线)
运行代码:
'''
作者:阿夏
时间:2022年11月24日蒙德里安“红黄蓝黑格子画-竖版)
(A4横版,上面第一个格子做三角支撑,下面的第2个格子插入画作。))
'''
# 代码出处: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 # 19.2 # 的长k
figWide = n # 18.3 的宽
h=input('横版还是竖版?\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'.format(h))# 打开带docx模板(这个模板有页脚的页码,阿夏认为页码是必须的)
table = doc.tables[1] # 一共有1个表格
k=path[nnn] # 提取list图案列表里面每个图形 t=索引数字
print(k)
run=doc.tables[1].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(h,nn))
file_merger.close()
# doc.Close()
# print('----------第5步:删除临时文件夹------------')
import shutil
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/蒙德里安/零时Word') #递归删除文件夹,即:删除非空文件夹
重点说明
1、运行参数
2、运行过程:
生成30张随机线条图。
生成图片所在路径
3、重要设置:
如何大量随机出现的长方形线条(有些参数的意思我也不太理解)
把图片导入Word
效果再展示:
感悟:
1、竖板《蒙德里安》更符合幼儿操作规律
(1)日常学习都是先写学号名字,再开始制作,与横版《蒙德里安》相比,竖版可以让幼儿从左到右、从上到下的规律,先完成个人信息填写、然后涂上指定的颜色。接着绘画红黄蓝黑格子。符合书写顺序
(2)先写信息,在进行裁剪,黏贴。符合先写画、后剪贴的学习思路,减少遗漏
2、竖板《蒙德里安》更符合操作台空间布局
平时活动都是准备30份A4学具,但是通常幼儿人数在23-26人之间,幼儿都会把多余的纸上上交,
老师:“放中间吧,万一有同学先完成了,可以在做一张!“
幼儿1:“可是桌子上放不下了”
幼儿2:“放着搞不清楚是谁的”
显然5-6人共用课桌时,大班幼儿能明显感受到操作空间有限——除了A4纸、还有记号笔剪刀胶水的笔筒及整盒蜡笔需要占空间。
因此在设计纸类学具投放时,要么把A4切成2份,要么把A4转换成正方形,如果必须要用整张A4,最好就是竖版排列。
横版&竖版
教学展示:
时间:2022年11月2X日 下午15:00-15:30
班级:大1班
人数:人