本章咱們將實現圖像像素採樣的繪製效果,如圖所示。首先學習圖像文件的讀取與顯示,獲取像素顏色;而後生成馬賽克效果,並實現隨機採樣畫圓、均勻採樣畫圓;最後利用葉序採樣的方式,實現風格化圖像的自動生成。python
知乎視頻 www.zhihu.com![圖標](http://static.javashuo.com/static/loading.gif)
視頻教程:ide
知乎視頻 www.zhihu.com![圖標](http://static.javashuo.com/static/loading.gif)
最終代碼:svg
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
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
這一章主要要學習了while循環語句,講解了圖像的基本概念,利用這些知識實現了圖像像素採樣。讀者也能夠利用圖像做爲基本元素,繪製出更加豐富有趣的互動效果。學習