当前位置:网站首页>【教学类-18-01】20221123《蒙德里安“红黄蓝黑格子画”-A4横板》(大班)

【教学类-18-01】20221123《蒙德里安“红黄蓝黑格子画”-A4横板》(大班)

2022-11-24 21:44:41reasonsummer

 效果展示:

单页效果

 多页效果

 预设效果

背景需求:

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

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

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

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

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

 WORD模板设置

(从实际操作角度来看,横板样式,不利于幼儿书写个人信息,而且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') #递归删除文件夹,即:删除非空文件夹

重点说明

1、运行参数

 2、运行过程:

  

 3、重要设置:

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

 

 把图片导入Word

 

 效果再展示:

感悟:

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

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

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

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

横版:

 竖版

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

原网站

版权声明
本文为[reasonsummer]所创,转载请带上原文链接,感谢
https://blog.csdn.net/reasonsummer/article/details/128008692

随机推荐