You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中在图片上显示非英文(印地语等)文本的问题求助

解决非拉丁脚本(印地语/泰卢固语/泰米尔语)文本显示问题的实用方案

核心问题分析

OpenCV的putText方法原生对复杂表意文字(尤其是南亚语言)支持极差,因为它依赖的FreeType版本或内部渲染逻辑不处理连字、字形组合这类复杂规则。PIL的ImageDraw.text理论上支持,但需要正确配置字体和文本编码。

分步解决建议

1. 确认字体文件有效性

  • 下载的TTF字体必须完整支持目标语言:比如印地语常用Noto Sans Devanagari,泰卢固语用Noto Sans Telugu,泰米尔语用Noto Sans Tamil,避免用仅支持部分字形的字体。
  • 验证字体:在系统字体预览里打开TTF,确认能显示目标语言的所有字符,避免下载到损坏或不完整的字体文件。

2. PIL的正确实现代码

from PIL import Image, ImageDraw, ImageFont

# 加载正确的字体文件,注意路径要准确
font_path = "NotoSansDevanagari-Regular.ttf"
try:
    font = ImageFont.truetype(font_path, 40)  # 第二个参数为字体大小
except IOError:
    print("字体文件加载失败,请检查路径")
    exit()

# 创建空白图片(或加载现有项目图片)
img = Image.new("RGB", (500, 200), "white")
draw = ImageDraw.Draw(img)

# 直接使用目标语言的Unicode字符串(Python 3默认支持)
hindi_text = "नमस्ते"
telugu_text = "నమస్కారం"
tamil_text = "வணக்கம்"

# 绘制印地语文本
draw.text((50, 50), hindi_text, font=font, fill="black")
# 绘制泰卢固语文本需加载对应字体
telugu_font = ImageFont.truetype("NotoSansTelugu-Regular.ttf", 40)
draw.text((50, 120), telugu_text, font=telugu_font, fill="black")
# 绘制泰米尔语文本需加载对应字体
tamil_font = ImageFont.truetype("NotoSansTamil-Regular.ttf", 40)
draw.text((250, 120), tamil_text, font=tamil_font, fill="black")

# 保存或预览图片
img.save("multi_lang_output.png")
img.show()

3. 适配OpenCV的处理流程

如果项目必须用OpenCV处理图片,先通过PIL完成文本绘制,再转换为OpenCV兼容格式:

import cv2
import numpy as np

# 将PIL图片转为OpenCV的BGR格式
cv_img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
cv2.imshow("Multi-Language Output", cv_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

4. 常见错误排查

  • 显示方框:检查字体是否真的支持目标字符,部分字体仅覆盖常用字,不包含生僻字形;
  • 显示乱码:确认文本是正确的Unicode字符,可通过在线Unicode工具验证字符编码;
  • 字体加载失败:Windows系统注意路径反斜杠需转义(用\\)或使用原始字符串r"path\to\font.ttf",Linux/macOS确保路径权限正常。

内容的提问来源于stack exchange,提问作者prisha sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:53:12