Pillow中textsize方法已弃用,求替代方案解决PDF生成报错问题
Pillow中废弃textsize方法的替代方案
Pillow 9.3.0版本起正式废弃了textsize()方法,替代方案是使用textbbox()方法获取文本边界框,进而计算文本宽高,完全兼容原有逻辑。
修改后的代码如下:
def text(self, x, y, text, color, font_size, font_name=IRRELEVANT_FONT_REGULAR): """ draws centralized text """ font = ImageFont.truetype(font_name, font_size) # 指定字体 # 获取文本边界框,返回格式为(left, top, right, bottom) bbox = self.draw.textbbox((0, 0), text, font=font) w = bbox[2] - bbox[0] # 计算文本宽度 h = bbox[3] - bbox[1] # 计算文本高度 # 保持原有的居中绘制逻辑 self.draw.text(((x - 0.5 * w), (y - 0.5 * h)), text, color, font=font, align="center")
说明
textbbox()需要传入一个基准坐标(这里用(0,0)即可,因为我们只需要文本自身的宽高,基准点不影响相对计算),返回文本的四个边界坐标值。- 通过边界框的
right - left得到宽度,bottom - top得到高度,结果和原textsize()返回的宽高完全一致。 - 若仅需文本宽度,可单独使用
textlength()方法,但这里因需要高度实现居中,textbbox()是更合适的选择。
内容的提问来源于stack exchange,提问作者Duncan
相关产品推荐
相关产品推荐

