1
- from PIL import Image , ImageDraw , ImageFilter
1
+ from __future__ import annotations
2
+
2
3
import numpy as np
4
+ from PIL import Image , ImageDraw , ImageFilter
5
+
3
6
4
7
# 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
+
9
15
10
16
# 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
+
23
34
24
35
# 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
+
32
44
33
45
# 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
+
39
52
40
53
# 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
50
63
51
64
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
56
69
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
60
73
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
64
80
65
- img .save ("red_soft_mask.png" )
66
- return img
67
81
68
82
# Generate all images
69
83
create_solid_color_image ()
@@ -73,5 +87,3 @@ def create_red_soft_mask(size=(400, 400)):
73
87
create_silhouette ("circle" )
74
88
create_silhouette ("rectangle" )
75
89
create_red_soft_mask ()
76
-
77
- print ("Done!" )
0 commit comments