(图书介绍:童晶:《Python趣味创意编程》新书预告)
本章我们将实现图像像素采样的绘制效果,如图所示。首先学习图像文件的读取与显示,获取像素颜色;然后生成马赛克效果,并实现随机采样画圆、均匀采样画圆;最后利用叶序采样的方式,实现风格化图像的自动生成。
知乎视频www.zhihu.com视频教程:
知乎视频www.zhihu.com最终代码:
def setup():
global img,goldenRatioAngle # 全局变量
goldenRatioAngle = ((sqrt(5)-1)/2)*360 # 黄金分割比乘以360度
noStroke() # 不绘制线条
size(500, 500) # 画面大小
img = loadImage("image2.jpg") # 导入图片文件
def draw():
background(255) # 白色背景
center_x = width/2 # 画面中心
center_y = height/2
id = 0 # 叶序采样点的序号
radius = 1 # 初始半径(采样点到画面中心的距离)
radiusStep = map(mouseX,0,height,5,1) # 半径增加的步长
maxDiameter = map(mouseY,0,width,1,6) # 画圆的最大直径
while radius<=width/2: # 当半径小于画面宽度一半时
degree = id*goldenRatioAngle # 当前采样点和中心连线的角度
angle = radians(degree%360) # 转换为弧度
radius = sqrt(id) * radiusStep # 采样点到中心的距离,逐渐增加
x = center_x + radius*cos(angle) # 求出当前采样点的坐标
y = center_y + radius*sin(angle)
c = img.get(int(x), int(y)) # 当前采样像素的颜色
fill(c) # 设置为填充颜色
bright = brightness(c) # 当前像素的亮度值
diameter = map(bright,0,255,maxDiameter,1) # 越亮直径越小
circle(x,y,diameter) # 画一个小圆
id += 1 # 采样点序号加1
这一章主要要学习了while循环语句,讲解了图像的基本概念,利用这些知识实现了图像像素采样。读者也可以利用图像作为基本元素,绘制出更加丰富有趣的互动效果。