1- from PIL import Image , ImageDraw , ImageFilter
1+ from __future__ import annotations
2+
23import numpy as np
4+ from PIL import Image , ImageDraw , ImageFilter
5+
36
47# Create a solid color image
5- def create_solid_color_image (size = (400 , 400 ), color = (255 , 0 , 0 , 255 )):
6- img = Image .new ("RGBA" , size , color )
7- img .save ("solid_color.png" )
8- return img
8+ def create_solid_color_image (
9+ size : tuple [int , int ] = (400 , 400 ), color : tuple [int , ...] = (255 , 0 , 0 , 255 )
10+ ) -> Image .Image :
11+ img = Image .new ("RGBA" , size , color )
12+ img .save ("solid_color.png" )
13+ return img
14+
915
1016# Create a gradient image
11- def create_gradient_image (size = (400 , 400 ), start_color = (0 , 0 , 255 ), end_color = (255 , 0 , 0 )):
12- img = Image .new ("RGB" , size )
13- for x in range (size [0 ]):
14- blend_factor = x / size [0 ]
15- color = (
16- int (start_color [0 ] * (1 - blend_factor ) + end_color [0 ] * blend_factor ),
17- int (start_color [1 ] * (1 - blend_factor ) + end_color [1 ] * blend_factor ),
18- int (start_color [2 ] * (1 - blend_factor ) + end_color [2 ] * blend_factor ),
19- )
20- ImageDraw .Draw (img ).line ([(x , 0 ), (x , size [1 ])], fill = color )
21- img .save ("gradient.png" )
22- return img
17+ def create_gradient_image (
18+ size : tuple [int , int ] = (400 , 400 ),
19+ start_color : tuple [int , ...] = (0 , 0 , 255 ),
20+ end_color : tuple [int , ...] = (255 , 0 , 0 ),
21+ ) -> Image .Image :
22+ img = Image .new ("RGB" , size )
23+ for x in range (size [0 ]):
24+ blend_factor = x / size [0 ]
25+ color = (
26+ int (start_color [0 ] * (1 - blend_factor ) + end_color [0 ] * blend_factor ),
27+ int (start_color [1 ] * (1 - blend_factor ) + end_color [1 ] * blend_factor ),
28+ int (start_color [2 ] * (1 - blend_factor ) + end_color [2 ] * blend_factor ),
29+ )
30+ ImageDraw .Draw (img ).line ([(x , 0 ), (x , size [1 ])], fill = color )
31+ img .save ("gradient.png" )
32+ return img
33+
2334
2435# Create a soft-edged circular mask
25- def create_soft_mask (size = (400 , 400 )):
26- img = Image .new ("L" , size , 0 )
27- draw = ImageDraw .Draw (img )
28- draw .ellipse ((50 , 50 , size [0 ] - 50 , size [1 ] - 50 ), fill = 255 )
29- img = img .filter (ImageFilter .GaussianBlur (20 ))
30- img .save ("soft_mask.png" )
31- return img
36+ def create_soft_mask (size : tuple [int , int ] = (400 , 400 )) -> Image .Image :
37+ img = Image .new ("L" , size , 0 )
38+ draw = ImageDraw .Draw (img )
39+ draw .ellipse ((50 , 50 , size [0 ] - 50 , size [1 ] - 50 ), fill = 255 )
40+ img = img .filter (ImageFilter .GaussianBlur (20 ))
41+ img .save ("soft_mask.png" )
42+ return img
43+
3244
3345# Create a noisy texture
34- def create_noise_texture (size = (400 , 400 )):
35- noise_array = np .random .randint (0 , 255 , (size [1 ], size [0 ]), dtype = np .uint8 )
36- img = Image .fromarray (noise_array , mode = "L" )
37- img .save ("noise_texture.png" )
38- return img
46+ def create_noise_texture (size : tuple [int , int ] = (400 , 400 )) -> Image .Image :
47+ noise_array = np .random .randint (0 , 255 , (size [1 ], size [0 ]), dtype = np .uint8 )
48+ img = Image .fromarray (noise_array , mode = "L" )
49+ img .save ("noise_texture.png" )
50+ return img
51+
3952
4053# Create a silhouette image (e.g., black cat)
41- def create_silhouette (shape = "circle" ):
42- img = Image .new ("RGBA" , size = (400 , 400 ), color = (255 , 255 , 255 , 0 ))
43- draw = ImageDraw .Draw (img )
44- if shape == "circle" :
45- draw .ellipse ((100 , 100 , 300 , 300 ), fill = (0 , 0 , 0 , 255 ))
46- elif shape == "rectangle" :
47- draw .rectangle ((100 , 150 , 300 , 350 ), fill = (0 , 0 , 0 , 255 ))
48- img .save (f"{ shape } _silhouette.png" )
49- return img
54+ def create_silhouette (shape : str = "circle" ) -> Image . Image :
55+ img = Image .new ("RGBA" , size = (400 , 400 ), color = (255 , 255 , 255 , 0 ))
56+ draw = ImageDraw .Draw (img )
57+ if shape == "circle" :
58+ draw .ellipse ((100 , 100 , 300 , 300 ), fill = (0 , 0 , 0 , 255 ))
59+ elif shape == "rectangle" :
60+ draw .rectangle ((100 , 150 , 300 , 350 ), fill = (0 , 0 , 0 , 255 ))
61+ img .save (f"{ shape } _silhouette.png" )
62+ return img
5063
5164
52- def create_red_soft_mask (size = (400 , 400 )):
53- # Create an RGBA image with transparency
54- img = Image .new ("RGBA" , size , (255 , 255 , 255 , 0 ))
55- mask = Image .new ("L" , size , 0 ) # Grayscale mask for blurring
65+ def create_red_soft_mask (size : tuple [ int , int ] = (400 , 400 )) -> Image . Image :
66+ # Create an RGBA image with transparency
67+ img = Image .new ("RGBA" , size , (255 , 255 , 255 , 0 ))
68+ mask = Image .new ("L" , size , 0 ) # Grayscale mask for blurring
5669
57- draw = ImageDraw .Draw (mask )
58- draw .ellipse ((50 , 50 , size [0 ] - 50 , size [1 ] - 50 ), fill = 255 )
59- mask = mask .filter (ImageFilter .GaussianBlur (30 )) # Feather effect
70+ draw = ImageDraw .Draw (mask )
71+ draw .ellipse ((50 , 50 , size [0 ] - 50 , size [1 ] - 50 ), fill = 255 )
72+ mask = mask .filter (ImageFilter .GaussianBlur (30 )) # Feather effect
6073
61- # Apply the mask as alpha channel to a red image
62- red_layer = Image .new ("RGBA" , size , (255 , 0 , 0 , 255 )) # Solid red
63- img = Image .composite (red_layer , img , mask ) # Blend using mask
74+ # Apply the mask as alpha channel to a red image
75+ red_layer = Image .new ("RGBA" , size , (255 , 0 , 0 , 255 )) # Solid red
76+ img = Image .composite (red_layer , img , mask ) # Blend using mask
77+
78+ img .save ("red_soft_mask.png" )
79+ return img
6480
65- img .save ("red_soft_mask.png" )
66- return img
6781
6882# Generate all images
6983create_solid_color_image ()
@@ -73,5 +87,3 @@ def create_red_soft_mask(size=(400, 400)):
7387create_silhouette ("circle" )
7488create_silhouette ("rectangle" )
7589create_red_soft_mask ()
76-
77- print ("Done!" )
0 commit comments