How to make a circular color gradient In python? A circular color gradient is a type of gradient that uses circular intervals to divide the color spectrum into equal-sized sectors. The center of the circle represents zero saturation and brightness, while the outer edge represents full saturation and brightness. This approach allows designers to create gradients that can be used on circular shapes like logos or buttons without distortion when viewed from different angles.
The matplotlib tool can be used in Python to create a circular colour gradient. A circular colour gradient can be created using the following sample code:
To create a circular color gradient, we need to import the colors module. Then we need to import the math module. Now let's create a list of colors as shown below: colors = ['red', 'orange', 'yellow', 'green', 'blue', 'purple'] and another example share it.
from PIL import Image, import colorsys
1. Set the image's dimensions.
size = 512
2. Define the gradient's middle and radius.
center = (size/2, size/2)
radius = size/2
3. Build a new image
img = Image.new('RGB', (size, size))
4. cycle through the picture's individual pixels.
for x in range(size):
for y in range(size):
1. Determine the separation from the middle.
distance = ((x - center[0])**2 + (y - center[1])**2)**0.5
2. Determine the pixel's angle from the middle.
angle = (180 / 3.14159265) * colorsys.hsv_to_rgb(distance/radius, 1, 1)[0]
3. depending on the angle, choose the pixel colour
color = tuple(map(int, colorsys.hsv_to_rgb(angle/360, 1, 1)))
img.putpixel((x, y), color)
Result: Show the image
img.show()
The second method to create a circular color gradient is by using a for loop. The main difference between this method and the first one is that instead of iterating through the colors manually, we will use Python's built-in range() function. This function allows us to pass in two numbers that represent our starting value and end value (i.e., 0 to 255), which then returns all integers between those two values as an iterable object:
import numpy as np from PIL import Image img = np.array(Image('lena')) cmap = img[:,:,0] / 255 for i in range(0, 256): cmap[i] = (cmap[i] + 1) % 255 # change each pixel depending on its index print("." * 30) print("Color Gradient") print("===========================================") print(".")*30 # newline output image = Image.fromarray(cmap).resize((256,256)) imgsave('gradient1', imgsave('gradient2', imgsave('gradient3',imgsave('gradient4','*.png').save(filepath='~/Desktop/')
● Import the packages you will need.
● Create a plot with matplotlib.pyplot, using numpy for data manipulation and pandas for data cleaning.
● Use seaborn to create a darkgrid theme for your plot.
Another way to use the numpy and matplotlib tools in Python to make a circular colour gradient is as follows:
import numpy as np
import matplotlib.pyplot as plt
1. Define the image's dimensions and the gradient's middle.
size = 512
center = (size/2, size/2)
2. Make an x and y vector meshgrid.
x, y = np.meshgrid(np.linspace(0, size-1, size), np.linspace(0, size-1, size))
3. Determine the separation between each spot and the centre.
r = np.sqrt((x-center[0])**2 + (y-center[1])**2)
4. Set the gradient's radius, then clip the lengths to it.
radius = size/2
r = np.clip(r, 0, radius)
5. Determine the angle between each spot and the centre.
theta = np.arctan2(y-center[1], x-center[0])
6. Normalize to the range after converting the angle to degrees. [0, 1]
theta = (theta + np.pi) / (2 * np.pi)
7. Use the angle and distance to create a hue gradient.
colors = np.zeros((size, size, 3))
colors[:,:,0] = theta
colors[:,:,1] = r / radius
colors[:,:,2] = 1
8. Transform the hues from HSV to RGB.
colors = plt.get_cmap('hsv')(colors)
Result: Show the image
plt.imshow(colors)
plt.axis('off')
plt.show()
Using the ImageDraw.pieslice() function of the PIL (Pillow) library, you can also draw a series of overlapping pie slices in various colours to produce a circular colour gradient in Python. Here is a sample of code:
from PIL import Image, ImageDraw, import math
1. Set the image's dimensions.
size = 512
2. Draw an object on a fresh image.
img = Image.new('RGB', (size, size), (0, 0, 0))
draw = ImageDraw.Draw(img)
3. Define the gradient's middle and radius.
center = (size/2, size/2)
radius = size/2
4. Specify the quantity and dimensions of the pie slices.
num_slices = 360
slice_size = 2*math.pi / num_slices
5.Draw a different-colored pie piece after each slice in an iterative fashion.
for i in range(num_slices):
start_angle = i * slice_size
end_angle = start_angle + slice_size
color = tuple(map(int, (255 * math.sin(start_angle)**2, 255 * math.cos(start_angle)**2, 0)))
draw.pieslice((center[0]-radius, center[1]-radius, center[0]+radius, center[1]+radius),
math.degrees(start_angle), math.degrees(end_angle), fill=color)
Result: Show the image
img.show()
This code cycles through every pie slice of something like the circular gradient while creating a fresh image of the desired dimensions and a draw object. Each slice's start and finish angles are calculated, and the angle is used to determine the colour of the slice. The pie slice is then drawn using the appropriate colour using pieslice(), and the circular colour gradient is displayed using the show() function of the Image class of the Pillow library.
Now that we've covered the basics of color gradients, let's take a look at some more advanced uses for them. You could use this code to create a circular gradient in Python or any other program!