32
32
TITLE_COLOR = "#338cf3"
33
33
TEXT_COLOR = "#dddddd"
34
34
TIME_COLOR = "#6A7B8C"
35
+ FOREGROUND_COLORS = ["#1D9BF9" ,"#FFCC00" ,"#F91880" ,"#7856FF" ,"#FF7A00" ,"#00BA7C" ]
35
36
EMOJI_JOINER = chr (0xFE0F )
36
37
37
38
FONTS = {
@@ -151,15 +152,15 @@ def draw_time(txt_draw: ImageDraw.ImageDraw, points: Box, text="04:20"):
151
152
152
153
153
154
def draw_avatar (
154
- img : Image , draw : ImageDraw .ImageDraw , username : str , points_balloon : Box , avatar_path : str ,
155
+ img : Image , draw : ImageDraw .ImageDraw , username : str , points_balloon : Box , avatar_path : str , background_color : str
155
156
):
156
157
y0 = points_balloon .bottom_right .y - AVATAR_SIZE
157
158
y1 = points_balloon .bottom_right .y
158
159
points = Box (MARGIN , y0 , MARGIN + AVATAR_SIZE , y1 )
159
160
box_position = tuple (a - 2 for a in points .top_left .to_tuple ())
160
161
size = AVATAR_SIZE + 4
161
162
if avatar_path == '' :
162
- draw .ellipse (points .to_list (), fill = TITLE_COLOR )
163
+ draw .ellipse (points .to_list (), fill = background_color )
163
164
avatar_center = points .center ().to_tuple ()
164
165
draw .text (
165
166
avatar_center , username [0 ], anchor = 'mm' , font = FONTS ['avatar' ], fill = '#FFFFFF' ,
@@ -182,7 +183,7 @@ def draw_avatar(
182
183
img .paste (tmp , mask = avatar_mask )
183
184
184
185
185
- def sticker_from_text (user_id : int , username : str , text : str , avatar_path : str , msg_time : str ):
186
+ def sticker_from_text (user_id : int , username : str , text : str , avatar_path : str , msg_time : str , other_user_id : int ):
186
187
'''
187
188
Creates an image from a text message, emulating Telegram's message layout/design.
188
189
'''
@@ -225,11 +226,12 @@ def sticker_from_text(user_id: int, username: str, text: str, avatar_path: str,
225
226
226
227
img = Image .new ("RGBA" , size , transparent )
227
228
dr = ImageDraw .Draw (img )
228
- draw_avatar (img , dr , username , points_balloon = points_balloon , avatar_path = avatar_path )
229
+ user_color = get_user_color (other_user_id )
230
+ draw_avatar (img , dr , username , points_balloon = points_balloon , avatar_path = avatar_path , background_color = user_color )
229
231
230
232
draw_balloon (dr , points = points_balloon , fill = BOX_COLOR )
231
233
232
- draw_username (dr , position = points_balloon .top_left , username = username )
234
+ draw_username (dr , position = points_balloon .top_left , username = username , fill = user_color )
233
235
draw_message (dr , points = points_balloon , text = final_text , user_size = title_size )
234
236
draw_time (dr , text = msg_time , points = points_balloon )
235
237
@@ -294,3 +296,7 @@ def generate_avatar_mask(img_size: tuple, points: Box):
294
296
maskdraw .ellipse (points .to_list (), fill = '#FFFFFF' )
295
297
del maskdraw
296
298
return img
299
+
300
+
301
+ def get_user_color (user_id : int ) -> str :
302
+ return FOREGROUND_COLORS [user_id % len (FOREGROUND_COLORS )]
0 commit comments