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

news2024/11/18 17:41:26

 效果展示:

单页效果

 多页效果

 预设效果

 

背景需求:

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

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

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

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

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

 WORD模板设置

 分栏,左边是参考图片和一副空白七巧板,右边是帖七巧板的画框位置。

 页边距l:上下左右1CM

 1、插入2*2表格,高度宽度如图

 2、空一行

 3、插入 分开来的七巧板(PPT自制)

 ​​​​​​插入形状-用直角三角形、正方形、平行四边形。照着彩色的图片一块块拼上去,然后稍微拉开空一点距离。

 

 把左侧的纯图片复制到WORD内部  

 Word模板终于做完了T_T

运行代码:

'''

作者:阿夏
时间: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、参考图案的随机出现:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/29761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis-Plus 和swagger

MyBatis-Plus 1.1MyBatis Plus 简介 mybatisplus 官网: https://baomidou.com/ MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变, 为简化开发、提高效率而生。 1.2主要特性&a…

【项目管理】Java使用pdfbox调用打印机打印PDF文件

【项目管理】Java使用pdfbox调用打印机打印PDF文件1.项目前言2.项目实现3.关键代码4.效果演示5.问题处理5.1 安装对应字体5.2 修改对应代码系统:Win10 Java:1.8.0_333 IDEA:2020.3.4 Gitee:https://gitee.com/lijinjiang01/Printe…

如何使用轮播图实现水平内容自动切换

通过轮播图实现一个水平内容自动切换 效果展示 前置准备 三张背景图片 具体步骤 添加一个轮播图组件 添加一个图片 添加一个标题 添加数据表 添加事件 添加触发器 绑定数据 步骤拆解 添加一个轮播图组件 1.1 拖拽 轮播图 到 编辑区 1.2 调整 轮播图 样式 添加一个图片 …

有关QT的问题大全

文章目录现在2022年,Qt发展如何?是就业的好选择吗?如何学习Qt,c到什么程度可以去学qt?现在 Qt 好找工作吗?为什么工业软件开发一般用的都是QT?初学QT怎么学?请问目前做windows桌面应用程序,MFC…

工作中Java Stream的简单应用

标题开发使用filter() and map()max()根据集合对象中的某个属性取最大值先解释一下各变量含义: temps集合是userids的子集(大前提) cache是temps集合在userids集合中的补集 简单来说就是,userids集合-temps集合cache补集,如下图所示目标:此次为工作中实际遇到的问题,需要得到c…

C++编译链接

文章目录C编译链接C编译模式分离式编译是个啥?怎么实现上述过程?定义与声明引出新的问题头文件有关头文件用来干啥?include头文件中应该写什么?#ifndef通过gcc/g命令来看完整的编译链接过程预处理(Preprocessing)编译(Compilation…

院内导航系统哪家口碑好?医疗院内导航地图公司排名

“医生,请问验血怎么走?”   “护士,请问药房在哪儿?”   “您好,做CT在什么地方?”   这些问题是医生和护士经常遇到的问题。的确,患者就诊时,由于对医院环境不熟悉&#xff…

云计算(虚拟化)面试宝典

一:服务器虚拟化 1.名词解释 (1)资源动态调整(对象是虚拟机) 管理员操作,对CPU、内存、网卡、硬盘、GPU进行调整。 FusionCompute支持虚拟机资源动态调整,用户可以根据业务负载动态调整资源的使用情况。 虚拟机资源调整包括: 离线/在线调整vCPU数目 无论虚拟机处于离线…

如何使用C++图形界面开发框架Qt创建一个应用程序?(Part 3)

Qt是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 点击获取Qt组件下载 …

Flink的状态编程

Flink 处理机制的核心,就是“有状态的流式计算”。在流处理中,数据是连续不断到来和处理的。每个任务进行计算处理时,可以基于当前数据直接转换得到输出结果;也可以依赖一些其他数据。这些由一个任务维护,并且用来计算…

【HAL库】STM32CubeMX开发----STM32F407----CAN通信实验

STM32CubeMX 下载和安装 详细教程 【HAL库】STM32CubeMX开发----STM32F407----目录 前言 本次实验以 STM32F407VET6 芯片为MCU,使用 25MHz 外部时钟源。 CAN通信波特率为 500K bps。 CAN通信引脚 与 MCU引脚 对应关系如下: CAN通信引脚MCU引脚TXPB9RXP…

虹科教您 | 虹科Automation softPLC入门操作指南(2)——子程序和用户自定义功能块 UDFB

虹科KPA Automation softPLC是为Linux、Xenomai、INtime、Windows等实时操作系统开发PLC的编程环境,适合需要使用IEC61131-3和PLCopen标准的控制技术和进行PLC编程的用户。本篇文章将帮助您创建和使用IEC语言开发的函数和功能块。 Automation softPLC Studio 命名规…

kettle 9.2源码打包和idea环境启动及常见错误

一:源码打包 这里为什么是kettle 9.2,因为kettle 9.3需要jdk11 这里直接去下载kettle的源码,tag9.2.0.4-R。这里需要自己搭建一个nexus仓库,因为有些包从kettle的仓库里面下载不下来。 nexus新建仓库代理, 记得加到public里面去 …

学术界or工业界,高校博后转行大厂工程师心得!

8本电子书免费送给大家,见文末。 导读:以下是这篇文章是一位 七月在线 学员的的学习和面试经历的分享,现将学员学习和面试心得分享给大家,祝大家都能有好的offer。 1 个人情况 我之前在高校做博后,现在转行到大厂做…

数据库的基本操作(7)

在这一篇博客中我将对数据库进行一个结尾,这将是关于数据库基本内容的结尾。 首先我们来简单总结一下前面的内容: 前面主要讲了Mysql中的索引和事务,这是面试必考的内容。 索引,怎么理解索引呢? 1.索引存在的意义&…

通用汽车在华加速推出智能电动车型

到2025年底前,推出超过15款基于奥特能平台打造的电动车型基于奥特能平台的雪佛兰FNR-XE纯电概念车全球首发通用汽车全新“软件定义汽车”平台将于明年正式推出近日,通用汽车中国在上海举办了“2022科技展望日”,展示了其在Ultium奥特能全球电…

IE高级配置中支持的SSL/TLS协议对应注册表值

一、手动勾选"Internet选项->高级->安全->使用TLS 1.2" 二、以编程方式勾选"Internet选项->高级->安全->使用TLS 1.2" 1.注册表值SecureProtocols对应的含义 注册表的路径为:HKEY_CURRENT_USER\Software\Microsoft\Windows…

【第六部分 | JavaScript高级】2:函数高级

目录 【第二章】函数进阶 | (复习)函数声明 | 函数也是对象 | 函数的this指向 | 改变函数this的指向 | 函数的“严格模式” | 闭包 | 浅拷贝和深拷贝 【第二章】函数进阶 | (复习)函数声明 | 函数也是对象 Java中的方法好…

Android基础二:常见的几种组件

关注我,会持续发布关于Android学习的内容! 文章目录 前言 一、MaterialButton 二、MaterialButtonToggleGroup 三、TextView 文本组件 四、ImageView控件 总结 前言 本节我们来学习安卓(Android)的几种常用的组件,包括…

PTA题目 装睡

你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次。下面给定一系列人的呼吸频率与脉搏,请你找出他们…