当前位置: 首页 > news >正文

pillow学习6

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

from PIL import Image, ImageDraw, ImageFontdef 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 = 30badge_diameter = badge_radius * 2badge_x = image.width - badge_diameterbadge_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) / 2text_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:笔触宽度

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LeetCode题练习与总结:从中序与后序遍历序列构造二叉树--106
  • amis中 InputTable Combo InputKV/InputKVS 区别
  • 数据库DCL语句
  • ES基础概念
  • freertos串口DMA队列发送卡死
  • Java的函数式接口和 Lambda 表达式
  • ICML 2024 Mamba 论文总结
  • Vue3判断变量和对象不为null和undefined
  • 为了性能,放弃tft_eSPI,选择arduino_gfx吧
  • Mysql 的 binlog 有几种格式?
  • 用Python Pygame做的一些好玩的小游戏
  • 【大数据】MapReduce JAVA API编程实践及适用场景介绍
  • 自回归模型(二):具有自回归误差的回归
  • 数据库缓存 buffer pool详解
  • 科技前沿:IDEA插件Translation v3.6 带来革命性更新,翻译和发音更智能!
  • 【391天】每日项目总结系列128(2018.03.03)
  • 30天自制操作系统-2
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CSS居中完全指南——构建CSS居中决策树
  • DataBase in Android
  • docker-consul
  • Iterator 和 for...of 循环
  • learning koa2.x
  • PHP CLI应用的调试原理
  • Python3爬取英雄联盟英雄皮肤大图
  • SegmentFault 2015 Top Rank
  • webgl (原生)基础入门指南【一】
  • 观察者模式实现非直接耦合
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 码农张的Bug人生 - 见面之礼
  • 深入浏览器事件循环的本质
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #### golang中【堆】的使用及底层 ####
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET Micro Framework初体验(二)
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • @Bean注解详解
  • [16/N]论得趣
  • [AI资讯·0612] AI测试高考物理题,最高准确率100%,OpenAI与苹果合作,将ChatGPT融入系统中,大模型在物理领域应用潜力显现
  • [BJDCTF2020]EzPHP1
  • [BUUCTF 2018]Online Tool(特详解)