Pillow 替换图片文字后字号偏小的排查

用 PIL 在模板图上填数字,在本地Windows里看正常,但是部署在测试环境Ubuntu环境,出来的字特别小,把 font_size 从 24 调到 48 也没变化。

原因:

ImageFont.load_default() 在 Pillow 10.1.0 之前返回的是固定尺寸的位图字体,不接受 size 参数。

修复:

arial.ttf 从 C:\Windows\Fonts\ 拷一份放到脚本同级目录。

python 复制代码
import os
from PIL import Image, ImageDraw, ImageFont


class ImageTextHandler:
    def __init__(self, img_path):
        self.img_path = img_path
        self.img = Image.open(img_path)
        self.draw = ImageDraw.Draw(self.img)
        base = os.path.dirname(os.path.abspath(__file__))
        try:
            self.font = ImageFont.truetype(os.path.join(base, "arial.ttf"), 24)
        except Exception as e:
            print("字体加载失败,回退默认字体:", e)
            self.font = ImageFont.load_default()

    def replace_text(self, data, pos, color):
        x1, y1, x2, y2 = pos
        self.draw.rectangle([x1, y1, x2, y2], fill=(255, 255, 255))
        self.draw.text((x1, y1), str(data), fill=color, font=self.font)

    def save_img(self, img_path='output_with_bg.jpg'):
        self.img.save(img_path)
相关推荐
朝朝辞暮i42 分钟前
第 01 讲:Python 变量、对象、数据类型与内存引用
开发语言·python
外收内放1 小时前
Python基础语法练习题(69)
开发语言·python
TomEval1 小时前
【测AI】第11篇:深度学习基础 —— 神经网络是怎么工作的
人工智能·python·深度学习·神经网络·机器学习·aigc
zhang-ge1 小时前
python包和项目管理器uv在ubuntu下的安装与使用
开发语言·python·uv
for_ever_love__1 小时前
LangChain 降级、重试与超时:让服务在模型抽风时还能用
python·自然语言处理·langchain·agent·超时·重试·with_retry
MoRanzhi12032 小时前
第 8 篇 · 机器学习建模与实验评估:建模流程与对照实验
python·机器学习·scikit-learn·模型评估·交叉验证·shap·消融实验
棉猴2 小时前
玩游戏学Python9-算术运算符应用1
python·游戏·pygame·玩游戏·游戏编程
凤年徐2 小时前
【Python】Python 语法速通指南
开发语言·python
quantdash_cc2 小时前
量化数据清洗应该放在数据层还是策略层?从系统架构看清职责边界
开发语言·python·数据分析·系统架构·量化交易·股票数据·quantdash