你是否想过,敲代码也能变成创作艺术的画笔?当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() # 只画边框,不填充

用Python玩转艺术创作:5个惊艳的Processing.py实战案例

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艺术,关注不迷路,一起让代码长出更多创意~

如果这篇内容对你有帮助,别忘了点赞+收藏,你的支持就是下次创作的动力呀!#全国青少年创意编程与智能设计大赛##全球设计灵感##广告创意设计##室内外设计#