Skip to content

Commit 900c5ab

Browse files
authored
Merge pull request #27 from caravelahc/add-different-colors-for-username-and-avatar
Resolves #20: Generate random color for username and avatar background
2 parents b725e82 + 03df5cf commit 900c5ab

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

picobot/handlers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def add_text(bot: Bot, msg: Message, user_id: int, pack_name: str, emoji: str):
160160

161161
text = msg.reply_to_message.text
162162
# save as png
163-
img_path = sticker_from_text(user_id, username, text, avatar_path, msg_time)
163+
img_path = sticker_from_text(user_id, username, text, avatar_path, msg_time, other_user_id)
164164
try:
165165
with open(img_path, 'rb') as png_sticker:
166166
bot.add_sticker_to_set(

picobot/painter.py

+11-5
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
TITLE_COLOR = "#338cf3"
3333
TEXT_COLOR = "#dddddd"
3434
TIME_COLOR = "#6A7B8C"
35+
FOREGROUND_COLORS = ["#1D9BF9","#FFCC00","#F91880","#7856FF","#FF7A00","#00BA7C"]
3536
EMOJI_JOINER = chr(0xFE0F)
3637

3738
FONTS = {
@@ -151,15 +152,15 @@ def draw_time(txt_draw: ImageDraw.ImageDraw, points: Box, text="04:20"):
151152

152153

153154
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
155156
):
156157
y0 = points_balloon.bottom_right.y - AVATAR_SIZE
157158
y1 = points_balloon.bottom_right.y
158159
points = Box(MARGIN, y0, MARGIN + AVATAR_SIZE, y1)
159160
box_position = tuple(a - 2 for a in points.top_left.to_tuple())
160161
size = AVATAR_SIZE + 4
161162
if avatar_path == '':
162-
draw.ellipse(points.to_list(), fill=TITLE_COLOR)
163+
draw.ellipse(points.to_list(), fill=background_color)
163164
avatar_center = points.center().to_tuple()
164165
draw.text(
165166
avatar_center, username[0], anchor='mm', font=FONTS['avatar'], fill='#FFFFFF',
@@ -182,7 +183,7 @@ def draw_avatar(
182183
img.paste(tmp, mask=avatar_mask)
183184

184185

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):
186187
'''
187188
Creates an image from a text message, emulating Telegram's message layout/design.
188189
'''
@@ -225,11 +226,12 @@ def sticker_from_text(user_id: int, username: str, text: str, avatar_path: str,
225226

226227
img = Image.new("RGBA", size, transparent)
227228
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)
229231

230232
draw_balloon(dr, points=points_balloon, fill=BOX_COLOR)
231233

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)
233235
draw_message(dr, points=points_balloon, text=final_text, user_size=title_size)
234236
draw_time(dr, text=msg_time, points=points_balloon)
235237

@@ -294,3 +296,7 @@ def generate_avatar_mask(img_size: tuple, points: Box):
294296
maskdraw.ellipse(points.to_list(), fill='#FFFFFF')
295297
del maskdraw
296298
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

Comments
 (0)