如何将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
相关产品推荐
相关产品推荐

