(图书介绍:童晶:《Python趣味创意编程》新书预告)

本章我们将实现图像像素采样的绘制效果,如图所示。首先学习图像文件的读取与显示,获取像素颜色;然后生成马赛克效果,并实现随机采样画圆、均匀采样画圆;最后利用叶序采样的方式,实现风格化图像的自动生成。

13 图像像素采样

视频教程:

最终代码:

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循环语句,讲解了图像的基本概念,利用这些知识实现了图像像素采样。读者也可以利用图像作为基本元素,绘制出更加丰富有趣的互动效果。

 

更多推荐

第13章 图像像素采样(《Python趣味创意编程》教学视频)