PornHub又名P站,網站流量在全球也是TOP10級別的,和淘寶、百度等站點同一個level,他們家網站的LOGO也顯得個性鮮明。ide
如何用Python畫一個呢?工具
畫圖須要用到一個庫叫Pillow,它是專門用來處理圖像的,功能很是強大,修圖工具能作的事,均可以用Pillow來實現。字體
咱們能夠先分析下這張圖的結構網站
它由兩部分組成,左邊是黑底白字,右邊是黃底黑字,還有一點點圓角。這兩部分包裹在一個黑色矩形框中。.net
思路清楚了後,就能夠動手實現3d
先實現左圖code
def left_img(text):blog
font = ImageFont.truetype('ArialEnUnicodeBold.ttf', FONT_SIZE) font_width, font_height = font.getsize(text) offset_y = font.font.getsize(text)[1][1] blank_height = font_height * 2 right_blank = int(font_width / len(text) * 0.25) img_height = font_height + offset_y + blank_height * 2 image_width = font_width + right_blank # 設置圖片寬高 image_size = image_width, img_height image = Image.new('RGBA', image_size, BG_COLOR) draw = ImageDraw.Draw(image) # 畫圖 draw.text((0, blank_height), text, fill=LEFT_TEXT_COLOR, font=font) image.save("left.png") return image
運行後生成的圖片是這樣的圖片
右圖也是相似的操做方式,只須要修改背景色和文字顏色ip
def create_right_img(text: str, font_size: int):
radii = RIGHT_PART_RADII
font = ImageFont.truetype('ArialEnUnicodeBold.ttf', font_size)
font_width, font_height = font.getsize(text)
offset_y = font.font.getsize(text)[1][1]
blank_height = font_height
left_blank = int(font_width / len(text) 0.25)
image_width = font_width + 2 left_blank
image_height = font_height + offset_y + blank_height * 2
image = Image.new('RGBA', (image_width, image_height), BOX_COLOR)
draw = ImageDraw.Draw(image)
draw.text((left_blank, blank_height), text, fill=RIGHT_TEXT_COLOR, font=font)
# 圓 magnify_time = 10 magnified_radii = radii * magnify_time circle = Image.new('L', (magnified_radii * 2, magnified_radii * 2), 0) # 建立一個黑色背景的畫布 draw = ImageDraw.Draw(circle) draw.ellipse((0, 0, magnified_radii * 2, magnified_radii * 2), fill=255) # 畫白色圓形 # 畫4個角(將整圓分離爲4個部分) magnified_alpha_width = image_width * magnify_time magnified_alpha_height = image_height * magnify_time alpha = Image.new('L', (magnified_alpha_width, magnified_alpha_height), 255) alpha.paste(circle.crop((0, 0, magnified_radii, magnified_radii)), (0, 0)) # 左上角 alpha.paste(circle.crop((magnified_radii, 0, magnified_radii * 2, magnified_radii)), (magnified_alpha_width - magnified_radii, 0)) # 右上角 alpha.paste(circle.crop((magnified_radii, magnified_radii, magnified_radii * 2, magnified_radii * 2)), (magnified_alpha_width - magnified_radii, magnified_alpha_height - magnified_radii)) # 右下角 alpha.paste(circle.crop((0, magnified_radii, magnified_radii, magnified_radii * 2)), (0, magnified_alpha_height - magnified_radii)) # 左下角 alpha = alpha.resize((image_width, image_height), Image.ANTIALIAS) image.putalpha(alpha) image.save("right.png") return image
效果圖
最後一步就是將兩張圖合併到一張黑底背景的矩形框就行了。
def create(left_text, right_text):
left_img = create_left_img(left_text)
right_img = create_right_img(right_text, FONT_SIZE)
blank = 30
bg_img_width = left_img.width + right_img.width + blank * 2
bg_img_height = left_img.height
bg_img = Image.new('RGBA', (bg_img_width, bg_img_height), BG_COLOR)
bg_img.paste(left_img, (blank, 0))
bg_img.paste(right_img, (blank + left_img.width, int((bg_img_height - right_img.height) / 2)), mask=right_img)
bg_img.save(f'{left_text}{right_text}.png')
最終的效果圖:
想生成其它文字版本只須要換個詞就能夠,好比GitHub套用P站風格就是這樣的
原文連接CSDN論壇:https://blog.csdn.net/lantian_123/article/details/105154380?utm_medium=distribute.pc_feed.none-task-blog-alirecmd-8.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-alirecmd-8.nonecase&request_id=侵刪