Class 34 — Wednesday, April 13

Chrestomatics and patterning

I need a haiku — I can't think of one I like — Will you please help me


Look both ways


Agenda


Downloads


Image Dimension Reminders

image dimension info


Drawing comparisons to Pointillism

pointillism artwork


Image manipulation with nested loops: gradient.py


Some possible image transformations

mandrill

mandrill

Duplicate

mandrill

mandrill

Bluing

mandrill

mandrill

Two tone

mandrill
mandrill

Upper left

mandrill

mandrill

Mirror


Our photo manipulation strategy


Basic photo-manipulation problem-solving pattern

# get dimensions of the original

ow, oh = ...

 

# set dimensions of the new image

nw, nh = ...

 

# get a new appropriately sized image

new_image = Image.new( 'RGB', ( nw, nh ) )

 

# fill in every pixel of the new image

# consider every x value for the new image between x=0 and x=width-1

for nx in range( 0, nw ) :

# in tandem with every y value for the image between y=0 and y=height-1

  for ny in range( 0, nh ) :

 

  # select the new spot to be filled in the new image

  nspot = (nx ,ny )

 

  # determine the corresponding old spot of interest in the original

  ospot = ...

 

  # get the pixel value -- that is, the color-- that is, the rgb value-- at the ospot

  opixel = ...

 

  # determine the pixel value-- that is, the rgb color value-- for the new image

  npixel = ...

 

  # set the nspot in the new image

  ...

 

# return the filled in new image

return new_image



Basic photo-manipulation problem-solving Python function

def manip( original, size, color, at ) :

  ''' Provide a pattern for image manipulation

  function size(): determines new image size based on the original

  function color(): determines new pixel's color based on the original pixel's color

  function at(): determines new pixel location relative to original

  '''

  # set dimensions of the new image

  nw, nh = size( original )

  # get a new appropriately sized image

  new_image = Image.new( 'RGB', ( nw, nh ) )

  # fill in every pixel of the new image

  for nx in range( 0, nw ) : # consider every x value for the new image

  for ny in range( 0, nh ) : # in tandem with every y value for the image

  # set the spot to be filled in the new image

  nspot = ( nx, ny )

  # determine the corresponding spot of interest in the original

  ospot = at( nspot, nw, nh )

  # get the pixel at the ospot

  opixel = original.getpixel( ospot )

  # determine the pixel for the new image

  npixel = color( opixel )

  # set the nspot in the new image

  new_image.putpixel( nspot, npixel )

  # return the filled in new image

  return new_image



Actual photo-manipulation problem-solving Python function

def same_size( image ) :

  return image.size

def same_color( pixel ) :

  return pixel

def same_at( spot, w, h ) :

  return spot

def manip( original, size=same_size, color=same_color, at=same_at ) :

  ...



More image transformations

mandrill

mandrill

Flip

mandrill

mandrill

Sepia

mandrill

mandrill

Grayscale

mandrill

mandrill

Clockwise rotation

mandrill

mandrill

Palette reduction

mandrill

mandrill

Shrinking

mandrill

mandrill

Pixelate

 


  🦆 © 2022 Jim Cohoon   Resources from previous semesters are available.