image - Plot gradients using PIL in Python -
i'm creating images using python, basics. thing i'm using
myimage = image.new('rgb', (250, 250), 'rgb(155,89,182)')
and well, creates image. but, there way create image background of color i'm choosing gradients? let me explain little bit more, want pick blue color, then, want deep blue in edges , more light blue in center of image. possible using simple pil , python? thank in advance.
the code depends on how want gradient look.
make rectangular gradient this:
or make round gradient this:
this code round gradient:
import image import math imgsize = (250, 250) #the size of image image = image.new('rgb', imgsize) #create image innercolor = [80, 80, 255] #color @ center outercolor = [0, 0, 80] #color @ corners y in range(imgsize[1]): x in range(imgsize[0]): #find distance center distancetocenter = math.sqrt((x - imgsize[0]/2) ** 2 + (y - imgsize[1]/2) ** 2) #make on scale 0 1 distancetocenter = float(distancetocenter) / (math.sqrt(2) * imgsize[0]/2) #calculate r, g, , b values r = outercolor[0] * distancetocenter + innercolor[0] * (1 - distancetocenter) g = outercolor[1] * distancetocenter + innercolor[1] * (1 - distancetocenter) b = outercolor[2] * distancetocenter + innercolor[2] * (1 - distancetocenter) #place pixel image.putpixel((x, y), (int(r), int(g), int(b))) image.save('circlegradient.jpg')
for each pixel, sets red, green, , blue values somewhere in between innercolor
, outercolor
depending on distance pixel center.
code rectangular gradient:
import image imgsize = (250, 250) #the size of image image = image.new('rgb', imgsize) #create image innercolor = [80, 80, 255] #color @ center outercolor = [0, 0, 80] #color @ edge y in range(imgsize[1]): x in range(imgsize[0]): #find distance closest edge distancetoedge = min(abs(x - imgsize[0]), x, abs(y - imgsize[1]), y) #make on scale 0 1 distancetoedge = float(distancetoedge) / (imgsize[0]/2) #calculate r, g, , b values r = innercolor[0] * distancetoedge + outercolor[0] * (1 - distancetoedge) g = innercolor[1] * distancetoedge + outercolor[1] * (1 - distancetoedge) b = innercolor[2] * distancetoedge + outercolor[2] * (1 - distancetoedge) #place pixel image.putpixel((x, y), (int(r), int(g), int(b))) image.save('rectgradient.jpg')
this works same way, except measures distance closest edge, not center.
Comments
Post a Comment