pillow学习6

练习题:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 类似于图中效果
网上有很多用draw.txt方法来定位,但是我下载的pillow里没这个方法

from PIL import Image, ImageDraw, ImageFont

def add_notification_badge(image_path, number):
    # 打开头像图片
    image = Image.open(image_path).convert("RGBA")

    # 设置字体(你需要提供一个字体文件路径
    font = ImageFont.truetype("arial.ttf", 40)

    # 创建一个用于绘制的对象
    draw = ImageDraw.Draw(image)

    # 设置红色圆圈的大小和位置
    badge_radius = 30
    badge_diameter = badge_radius * 2
    badge_x = image.width - badge_diameter
    badge_y = 0


    # 设置数字的位置
    text = str(number)
    text_bbox = draw.textbbox((0, 0), text, font=font)
    text_width = text_bbox[2] - text_bbox[0]
    text_height = text_bbox[3] - text_bbox[1]
    text_x = badge_x + (badge_diameter - text_width) / 2
    text_y = badge_y + (badge_diameter - text_height) / 2

    # 画数字
    draw.text((text_x, text_y), text, fill="red", font=font)

    # 保存输出图片
    image.show()

# 示例使用
add_notification_badge("blend1.jpg", 5)

可以用text_bbox()来解决
draw.textbbox 是 Pillow 库中用于计算文本边界框(bounding box)的方法。它返回一个包含文本的四个边界坐标的元组 (left, top, right, bottom)。这个方法可以帮助你确定文本的精确宽度和高度,从而在图像上正确定位文本。

text_bbox = draw.textbbox(xy, text, font=None, anchor=None, spacing=4, align="left", direction=None, features=None, language=None, stroke_width=0)

xy:一个 (x, y) 元组,指定文本起始点的位置。
text:要绘制的文本字符串。
font:ImageFont 对象,用于指定字体和大小。
anchor:文本锚点。
spacing:文本行之间的间距。
align:对齐方式(如 “left”, “center”, “right”)。
direction:文本方向(如 “ltr”, “rtl”)。
features:OpenType 特性。
language:语言标记。
stroke_width:笔触宽度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值