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

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")
    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站风格就是这样的

完整源代码可进入公众号主页回复“PH”获取

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值