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

如何将Excel文件内容写入图片?现有Python代码无法运行求协助

问题:使用PIL将Excel读取内容写入图片失败排查

我已经用以下Pandas代码成功读取Excel文件并得到输出:

import pandas as pd
 
# 读取Excel默认的第一个工作表
dataframe1 = pd.read_excel(r'E:\Images\New Folder\afec9b91-5c2f-4cab-aca8-abd7bde854e0\P_SA_C0002_DcW_R1_01_FMV_000000000000.xlsx')
print(dataframe1)

输出结果:

Sensor Longitude   Sensor Latitude             Survey ID
      72.69362         32.090865                 P_SA_C0002_DcW_R1_01

现在我想把上述输出内容写入指定图片,编写了以下PIL相关代码但无法正常运行,请帮忙排查问题:

from PIL import Image,ImageDraw,ImageFont
import glob
import os

images=glob.glob("E:\Images/*.jpg")

for img in images:
    images=Image.open(img)
    draw=ImageDraw.Draw(images)
    font=ImageFont.load_default()
    import pandas as pd
 
# 读取Excel默认的第一个工作表
dataframe1 = pd.read_excel(r'E:\Images\New Folder\afec9b91-5c2f-4cab-aca8-abd7bde854e0\P_SA_C0002_DcW_R1_01_FMV_000000000000.xlsx')
#print(dataframe1)
   # write ="dataframe1"
   
    text="print"

   
    draw.text((0,240),text,(250,250,250),font=font)
    images.save(img)

代码错误点排查

  • 缩进完全错误:for循环仅包含images=Image.open(img)一行,后续的绘图、Excel读取、文本写入代码都不在循环块内,导致循环逻辑失效,变量作用域混乱,draw等变量无法被正确调用。
  • 变量名冲突:循环外的images是图片路径列表,循环内又被赋值为打开的图片对象,覆盖了原列表,导致循环只能执行一次甚至报错。
  • 文本内容未使用Excel数据:代码里text="print"是固定字符串,完全没用到读取到的Excel内容,达不到需求。
  • 导入语句位置错误:import pandas as pd被放在for循环内部,每次循环都会重复导入模块,既浪费资源也不符合编码规范,应该移到文件顶部。
  • 路径转义问题:glob.glob("E:\Images/*.jpg")的未转义反斜杠可能被解析为转义字符,导致无法匹配图片文件,需用原始字符串r"E:\Images/*.jpg"或双反斜杠"E:\\Images/*.jpg"。

修正后的代码

from PIL import Image, ImageDraw, ImageFont
import glob
import os
import pandas as pd

# 提前读取Excel数据,避免重复读取
dataframe1 = pd.read_excel(r'E:\Images\New Folder\afec9b91-5c2f-4cab-aca8-abd7bde854e0\P_SA_C0002_DcW_R1_01_FMV_000000000000.xlsx')
# 将DataFrame转为和打印输出一致的文本格式
text = dataframe1.to_string(index=False)

# 正确匹配图片路径,用原始字符串避免转义问题
image_paths = glob.glob(r"E:\Images/*.jpg")

for img_path in image_paths:
    # 打开目标图片
    img = Image.open(img_path)
    draw = ImageDraw.Draw(img)
    # 使用默认字体,也可替换为系统自定义字体
    font = ImageFont.load_default()
    # 在指定位置绘制白色文本,坐标可根据图片尺寸调整
    draw.text((10, 240), text, (255, 255, 255), font=font)
    # 保存修改后的图片
    img.save(img_path)

补充说明

如果默认字体显示过小,可使用系统字体文件指定字号,示例(Windows系统):

# 替换为你系统中的字体路径,这里用微软雅黑
font = ImageFont.truetype(r"C:\Windows\Fonts\msyh.ttc", 12)

文本坐标(10, 240)可根据图片实际尺寸调整,避免文本被截断;若内容过长,可拆分多行绘制。

内容的提问来源于stack exchange,提问作者yahya javed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:35:41