你是否想过,敲代码也能变成创作艺术的画笔?当Python遇上Processing.py,原本严谨的编程逻辑便能长出创意的翅膀——小到一幅会呼吸的动态图形,大到能跟人互动的数字装置,都能靠几行代码实现。今天就带你走进这场“代码与艺术的碰撞”,用5个超酷的Processing.py实战案例,从零解锁创意编程的乐趣,每个案例都附完整代码解析,新手也能跟着上手!
打开今日头条查看图片详情
案例1:区块链风格随机鸟(NFT灵感)——一键生成“独一无二”
刷到过那些形态各异的NFT数字藏品吗?其实不用复杂工具,用Processing.py也能做出类似的“随机生成艺术”。这个案例会让程序自动画出数百种不同的鸟,每一只的大小、颜色、花纹都不重复,像开盲盒一样有趣。
打开今日头条查看图片详情
核心思路:把“鸟”拆成可调节的“零件”
要让生成的鸟不重复,关键是“拆分结构+随机参数”。我们先把鸟分成脸部、嘴巴、身体、尾巴几个部分,给每个部分设定“变量范围”——比如嘴巴长度可以是身体的0.5到1.3倍,颜色从4组配色里随机挑,这样每次运行代码,组合出的鸟都是独一份的。
代码实现(简化版)
def setup():
size(800, 600) # 设定画布大小
noLoop() # 只生成一次,不重复刷新
def draw():
background(255) # 白色背景
# 随机生成鸟的大小倍数(0.7-1.05)和图案类型(0-3)
draw_bird(random(0.7, 1.05), int(random(0, 4)))
def draw_bird(mult, pattern_type):
# 以画布最小边为基准,计算各部位尺寸(mult控制整体大小)
u = min(width, height) * 0.15 * mult
fw, fh = u, u # 脸部宽高
mw = u * 0.5 * random(0.5, 1.3) # 嘴巴长度(随机波动)
bw, bh = u * 2, u * 2 # 身体宽高
# 选配色:4组预设颜色,按pattern_type随机切换
colors = [
(255, 100, 100), (100, 200, 255), # 粉+蓝
(150, 255, 150), (255, 255, 100) # 绿+黄
]
body_color = colors[pattern_type]
fill(body_color) # 填充身体颜色
# 画身体(椭圆)
ellipse(width/2, height/2, bw, bh)
# 画脸部(小椭圆叠在身体上)
fill(255) # 脸部白色
ellipse(width/2, height/2 – bh*0.3, fw, fh)
# 画嘴巴(三角形)
fill(255, 200, 0) # 黄色嘴巴
triangle(
width/2 + fw*0.4, height/2 – bh*0.3, # 起点(脸部右侧)
width/2 + fw*0.4 + mw, height/2 – bh*0.3 + mw*0.2, # 嘴尖
width/2 + fw*0.4 + mw, height/2 – bh*0.3 – mw*0.2 # 嘴底
)
# 画尾巴(根据pattern_type画不同形状,这里简化为矩形)
if pattern_type % 2 == 0:
rect(width/2 – bw*0.5, height/2, bw*0.3, bh*0.6)
else:
triangle(
width/2 – bw*0.5, height/2,
width/2 – bw*0.5 – bw*0.4, height/2 – bh*0.3,
width/2 – bw*0.5 – bw*0.4, height/2 + bh*0.3
)
打开今日头条查看图片详情
玩起来:每一次运行都是新作品
点击运行后,白色画布上会慢慢“拼”出一只鸟——可能是粉色身体配尖尾巴,也可能是蓝色身体配宽尾巴。如果想生成更多,把noLoop()改成loop(),再按键盘“s”键(可以自己加个保存图片的代码),就能存下这些“数字藏品”,用来做壁纸、明信片都很合适。
️ 案例2:毛笔字模拟——鼠标一动,写出“笔墨晕染”感
用鼠标画画总觉得“生硬”?这个案例能模拟毛笔的笔触:鼠标移动快,线条就细;移动慢,线条就粗,跟用真毛笔在纸上写画一样有层次感,试试写自己的名字,会有惊喜。
核心技巧:用“速度”控制“粗细”
真实毛笔的“粗细变化”,本质是“运笔速度”决定的——快笔少墨,线条细;慢笔多墨,线条粗。我们可以让程序计算鼠标移动的速度(每帧之间的位置差),再让线条粗细跟着速度反着变:速度越快,strokeWeight(笔触粗细)越小,反之则越大。
关键代码
打开今日头条查看图片详情
# 记录上一帧鼠标位置
lastX, lastY = 0, 0
def setup():
size(800, 600)
background(245) # 米白背景,像宣纸
stroke(0) # 黑色笔触,像墨
strokeCap(ROUND) # 笔触末端圆润,更像毛笔
def mousePressed():
# 鼠标按下时,记录初始位置
global lastX, lastY
lastX, lastY = mouseX, mouseY
def mouseDragged():
global lastX, lastY
# 算鼠标移动速度:x和y方向的距离差
vx = mouseX – lastX
vy = mouseY – lastY
speed = sqrt(vx*vx + vy*vy) # 勾股定理算实际速度
# 速度越快,笔触越细(最小1,最大25)
strokeWeight(max(25 – speed, 1))
# 画线条(从上一位置到当前位置)
line(lastX, lastY, mouseX, mouseY)
# 更新上一位置,为下一帧做准备
lastX, lastY = mouseX, mouseY
小技巧:调参数换“笔锋”
想让线条更“晕染”?加一句strokeJoin(ROUND)让转弯处更圆润;想换颜色,把stroke(0)改成stroke(100, 50, 0)(棕色),模拟朱砂笔;如果用平板触控笔,效果会更像真的毛笔字——这个案例很适合做数字书法作品。
案例3:回旋多边形(递归泰森图)——用算法画“禅绕画”
见过那种层层嵌套、对称又复杂的禅绕画吗?其实不用手动画,用“泰森多边形+递归”算法,程序能自动生成这种充满规律的图案。泰森多边形会把画布分成不规则小块,再在每个小块里递归画更小的多边形,最后形成像迷宫一样的回旋结构。
打开今日头条查看图片详情
核心算法:先“分割”再“嵌套”
第一步用泰森多边形分割画布:随机撒几个点,程序会自动画出“每个点到周边点距离相等”的边界,把画布分成零散的小块;第二步用递归——在每个小块里再撒点、再分割,重复几次,就能得到层层嵌套的复杂结构,数学感和艺术感都拉满。
Python后端(计算泰森多边形)
需要先装scipy库(pip install scipy),用它计算多边形边界:
from scipy.spatial import Voronoi
import numpy as np
def generate_voronoi(points, bounds):
# 加几个边界点,避免多边形超出画布
extra_points = [
[bounds[0], bounds[1]], [bounds[0], bounds[3]],
[bounds[2], bounds[1]], [bounds[2], bounds[3]]
]
all_points = np.vstack([points, extra_points]) # 合并所有点
return Voronoi(all_points) # 生成泰森多边形
Processing绘制代码(简化版)
import numpy as np
from scipy.spatial import Voronoi
def setup():
size(800, 800)
noFill() # 只画边框,不填充

stroke(0, 100) # 灰色线条,避免太刺眼
def draw():
background(255)
# 在画布内随机撒20个点
points = np.random.rand(20, 2) * [width, height]
vor = generate_voronoi(points, [0, 0, width, height])
# 画多边形边界
for region in vor.regions:
if -1 not in region and len(region) > 0: # 跳过无效区域
beginShape()
for i in region:
x, y = vor.vertices[i]
vertex(x, y) # 逐个点连起来
endShape(CLOSE)
noLoop() # 画一次就停
效果:越简单越惊艳
运行后,画布上会出现很多不规则的多边形,彼此嵌套又不重叠,像自然形成的裂纹,又像精心设计的装饰图案。如果想更复杂,多撒几个点(比如把20改成50),或者在stroke()里加透明度(比如stroke(0, 50)),叠几层不同颜色的多边形,质感会更丰富。
案例4:Kinect互动油画(体感控制)——用身体“画”画
如果觉得鼠标互动不够酷,试试用身体当画笔!这个案例结合Kinect传感器(或普通摄像头),捕捉人体动作——比如挥动手臂,画布上就会留下油画质感的笔触;说话声音大,笔触还会变粗,像在空气里“挥洒颜料”。
核心技术:把“动作”转成“画笔参数”
Kinect能捕捉骨骼坐标(比如手部、头部的位置),我们把这些坐标当成“画笔位置”;同时用音频分析库获取环境音量,音量越大,笔触越粗、颜色越鲜艳;再用“随机点画”模拟油画笔触——不是画直线,而是画一堆小椭圆,叠加起来就有颜料堆积的质感。
Processing代码(简化版)
# 需要先安装Kinect库和音频分析库
from KinectPV2 import *
import audioAnalysis
kinect = KinectPV2(this)
audio_level = 0 # 音频音量
def setup():
size(1200, 800)
kinect.initSkeleton() # 初始化骨骼追踪
background(240) # 浅灰背景
def draw():
global audio_level
kinect.update()
# 获取音频音量(0-1)
audio_level = audioAnalysis.getLevel()
# 获取骨骼数据
skeletons = kinect.getSkeletonData()
if len(skeletons) > 0:
打开今日头条查看图片详情
# 取右手坐标
hand = skeletons[0].getJoint(KinectPV2.JointType_HandRight)
# 用右手位置画笔触
paintStroke(hand.x * width, hand.y * height)
def paintStroke(x, y):
# 笔触大小跟着音量变(2-20)
stroke_size = map(audio_level, 0, 1, 2, 20)
# 颜色随机但柔和
fill(random(100, 200), random(100, 200), random(100, 200), 80)
# 画5个小椭圆,模拟油画笔触
for _ in range(5):
ellipse(
x + random(-stroke_size, stroke_size),
y + random(-stroke_size, stroke_size),
stroke_size, stroke_size
)
打开今日头条查看图片详情
适用场景:互动装置超吸睛
这个案例很适合做展览——比如在美术馆里放一块大屏幕,观众挥动手臂就能“画”出动态油画,声音越大画面越热闹,连小朋友都能玩得投入。如果没有Kinect,用普通摄像头加OpenCV库捕捉手部位置,也能实现类似效果。
案例5:植物生长模拟(L-system分形)——让代码“长”出一棵树
想不想看代码“种”树?这个案例用L-system分形算法模拟植物生长:从一根主干开始,每长一段就分几个枝桠,枝桠再分小枝,最后长出一棵有层次感的树,还能让它随着时间慢慢“生长”,像延时摄影一样。
核心算法:用“规则”模拟生长
L-system的本质是“递归规则”——我们定义“生长指令”:比如“F”代表“画一段枝条”,“+”代表“向右偏”,“-”代表“向左偏”,再设定“规则”:比如每遇到“F”,就换成“F+F-F-F+F”(长一段后分两个枝)。程序按这个规则递归执行,就能从简单指令长出复杂的树枝结构。
打开今日头条查看图片详情
关键代码
def setup():
size(800, 600)
background(255)
stroke(80, 150, 50) # 绿色枝条
angle = radians(25) # 分枝角度(25度)
# 初始长度50,从底部中间开始长
branch(width/2, height, 50, -PI/2, 8, angle) # -PI/2是向上的方向
def branch(x, y, len, angle, depth, branch_angle):
if depth <= 0:
return # 长到最细就停
# 算枝条末端位置
x2 = x + len * cos(angle)
y2 = y + len * sin(angle)
# 画枝条
line(x, y, x2, y2)
# 递归画分枝:左边分一个
branch(x2, y2, len*0.7, angle – branch_angle, depth-1, branch_angle)
# 右边分一个
branch(x2, y2, len*0.7, angle + branch_angle, depth-1, branch_angle)
# 中间再分一个(让树更茂密)
if random(1) > 0.3: # 30%概率不分中间枝,更自然
branch(x2, y2, len*0.6, angle, depth-1, branch_angle)
进阶:让树“活”起来
想让树动态生长?把setup()里的branch()放到draw()里,再加个“生长进度”变量,比如current_depth从1慢慢涨到8,每帧只画到当前进度,就能看到树从一根小芽慢慢长茂密;想加叶子,在depth==0(最细的枝)末端画几个绿色椭圆,秋天就换黄色,四季都能“种”。
打开今日头条查看图片详情
总结:Processing.py 创意应用方向
方向 核心技术点 案例参考
生成艺术 随机参数、规则组合 区块链风格随机鸟
交互艺术 鼠标/传感器输入、速度捕捉 毛笔字模拟、Kinect油画
算法图形 泰森多边形、递归分形 回旋多边形
自然模拟 L-system、生长规则 植物生长模拟
如何开始你的创意编程之旅?
1. 先搭环境:去Processing官网下载软件,打开后点击顶部“语言”选“Python”(首次用会自动装插件,等几分钟就行);
2. 从“改参数”开始:不用一开始写代码,拿案例代码改改数值——比如把鸟的大小倍数改成0.5,看看会不会变“迷你鸟”;
3. 结合兴趣玩:喜欢画画就先试毛笔字案例,喜欢自然就玩植物生长,用兴趣推着学比硬啃语法更有动力;
打开今日头条查看图片详情
4. 去社区找灵感:OpenProcessing社区有很多人分享作品,看到喜欢的可以研究他的代码逻辑,慢慢攒自己的“创意库”。
最后想说:代码不只是工具,更是表达的语言
很多人觉得“编程离艺术很远”,但Processing.py最妙的地方,就是把复杂的技术藏在简单的语法后面——你不用是专业程序员,只要有想法,就能用ellipse()画圆、用mouseX追鼠标,把脑海里的画面变成动态的数字作品。
打开今日头条查看图片详情
试试今天的案例吧:画一只随机鸟当头像,用毛笔字写一句喜欢的诗,或者“种”一棵树做桌面壁纸。如果做出了有趣的作品,欢迎在评论区分享——创意从来不是“会与不会”,而是“试不试”。
下次我们会聊聊怎么用Processing.py做3D艺术,关注不迷路,一起让代码长出更多创意~
如果这篇内容对你有帮助,别忘了点赞+收藏,你的支持就是下次创作的动力呀!#全国青少年创意编程与智能设计大赛##全球设计灵感##广告创意设计##室内外设计#