专栏名称: Python之禅
分享Python相关技术干货,偶尔扯扯其它的
目录
相关文章推荐
Python中文社区  ·  揭秘 DeepSeek ... ·  昨天  
Python爱好者社区  ·  节后第一个私活,赚了3w ·  3 天前  
Python爱好者社区  ·  python接私活,yyds ·  2 天前  
Python爱好者社区  ·  DeepSeek 最新中国大学排名 ·  2 天前  
Python开发者  ·  “李飞飞团队50 美元炼出 ... ·  5 天前  
51好读  ›  专栏  ›  Python之禅

这个沙雕项目,可以自制PornHub风格LOGO

Python之禅  · 公众号  · Python  · 2020-03-27 18:30

正文


PornHub又名P站,网站流量在全球也是TOP10级别的,和淘宝、百度等站点同一个level,他们家网站的LOGO也显得个性鲜明。

如何用Python画一个呢?

画图需要用到一个库叫Pillow,它是专门用来处理图像的,功能非常强大,修图工具能做的事,都可以用Pillow来实现。

我们可以先分析下这张图的结构

它由两部分组成,左边是黑底白字,右边是黄底黑字,还有一点点圆角。这两部分包裹在一个黑色矩形框中。

思路清楚了后,就可以动手实现

先实现左图

def left_img(text):
# 指定字体和字体大小
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

运行后生成的图片是这样的



右图也是类似的操作方式,只需要修改背景色和文字颜色

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"






请到「今天看啥」查看全文