GMU:Bots 'n' Plots/Apasri Titatarn

From Medien Wiki

cloud my sheep robot. . . Sheep.png

Homework 2nd week

CloudBot

Cloud bot s.gif


Code----

#cloud
width = 400
posx = [width/4,width/3,3*width/5,width/2,width/5,2*width/3,3.8*width/5,width/2.3]

def setup():
    size(400,400)
    background(255)
    frameRate(12)
   
    
    
def draw():
    noStroke()
    background(179,226,228)
    change= sin(frameCount*0.1)
    drawcloud(change)
    sx= width/2
    n = frameCount
    textsnow(posx,change)
  
    saveFrame("cloudbot##.jpg")

    

    
def drawcloud(change):
    print change
    fluffy = change*5
    fill(255)
    #cloud 1 S
    ellipse(1.25*width/5,0.9*height/1.8,80+fluffy,80+fluffy)
    #cloud 2 M
    ellipse(2*width/5,height/1.8-height/10,130+2*fluffy,120+1.5*fluffy)
    #cloud 3 L
    ellipse(2.7*width/5,0.95*height/1.8-height/10,120+fluffy,145+fluffy)
    #cloud 4 M
    ellipse(3.5*width/5,height/1.8-height/10,110+2.5*fluffy,110+2*fluffy)
    
    #face
    fill(80)
    ellipse(width/3,height/2,7,7)
    ellipse(2*width/3,height/2,7,7)
    
   
    
def textsnow(posx,change):
    fill(255)
    textSize(32)
    i=0
    while i <7:
        text("*",posx[i]+change*i,height/1.8+frameCount*(i+1)/5)
        i =i+1



TwitterBot :MID TERM ASSIGNMENT

Kaleidoscope Bot=

code for the image processing

=================

from PIL import Image, ImageDraw,ImageFilter import PIL.ImageOps as im import numpy as np

def makekaleido():

  1. put image path
   imgfile = "img.jpg"
  1. load Image
   source = Image.open(imgfile)
  1. adjust the source image a bit for nicer result
   base = source.rotate(31)


  1. creat mask base the same size with source image
   mask = Image.new('RGBA', base.size, (255,255,255,0))
   x, y = base.size
  1. one variable to vary the size of triangle
   var = y/14 
  1. Define triangle mask position (triangle with 20 degree)
   (originx,originy) = (x/3,int(0.9*y))
   trih = int(12*var)  #fix formular for triangle height
   triw = int(4.2*var) #fix formular for triangle width
   polygonpos = [(originx,originy),
   (originx+triw,originy), 
   (originx+triw/2,originy-trih)]
  1. print(trih,triw)


  1. Create mask
   draw = ImageDraw.Draw(mask,'RGBA')
   draw.polygon(polygonpos,(0,0,0,255))
   del draw
   mask.save("mask.png")
  1. Get the Alpha band from the template
   tmplt = Image.open('mask.png')
   A = tmplt.split()[3]


  1. make one piece of triangle on transparent bg
   [R,G,B]=base.split()
   tri = Image.merge('RGBA', (R, G, B, A))
  1. crop it to the exact size of triangle!! to create primary pattern
  2. box (left, top , right, buttom)
   box =(originx,(originy-trih),(originx+triw),originy)
   pattern_plain=tri.crop(box)
   pattern_plain.save('pattern_plain.png')
   print('....pattern created....')


  1. add style to pattern
   pattern = pattern_plain
  1. pattern= pattern_plain.filter(ImageFilter.EDGE_ENHANCE)
   pattern.save('pattern_tri.png')
   print('....stylized pattern....')


  1. make square canvas for the output (wide = double size of height of primary pattern)
   canvas =Image.new('RGBA',(2*trih,2*trih), (255,255,255,0))
   canvas.save('tmpcanvas.png')
   pcanvas=Image.new('RGBA',(2*trih,2*trih), (255,255,255,0))



  1. put pattern on the canvas
  2. make sure to put the tip of the triangle at the center of the canvas
  3. because when we rotate the center of the object is the pivot point
  4. note: paste command require the coordinate of top left corner
  5. so point to paste the pattern is . . .
   ccenterx = int(trih-triw/2) 
   canvas.paste(pattern,(ccenterx,trih))


  1. start rotate the pattern around every 40 degree
   for i in range (0,360,40):
       tmpcanvas = canvas
       tmppat = canvas.rotate(i)
       canvas= Image.alpha_composite(tmpcanvas,tmppat)
  1. now we get half of the things
   half = canvas
  1. mirror the half and put in the space to create simple kaleidoscpoe effect
   mirror = im.mirror(half)
   half2= mirror.rotate(20)


  1. merge 2 half
   output=Image.alpha_composite(half,half2)


   output.save("final.png")

if __name__ == '__main__':

   makekaleido()