Python多用户场景下图片路径适配及图片嵌入脚本实现问询
解决方案:适配多用户路径 + 嵌入图片为单文件
作为第一个Python程序,你考虑的这两个问题其实非常实用——多用户路径适配和单文件分发都是工具类脚本的常见需求,我来给你几个简单易上手的方案:
一、处理不同用户的图片路径问题
你当前代码里的图片路径是硬编码的C:\Users\Desktop\image,这肯定没法适配不同用户的电脑。这里有两种适合新手的方案:
1. 让用户手动输入路径(最直接)
直接在脚本里加入输入逻辑,让用户自己填写图片的存放路径,代码修改后如下:
from PIL import Image, ImageFont, ImageDraw, ImageOps # 让用户输入空白图片的路径 image_path = input("请粘贴你的空白图片路径(比如 C:\\Users\\你的名字\\Desktop\\blank.png):") im = Image.open(image_path) # 注意:这里要先定义OD变量,不然会报错! OD = "需要添加的文本内容" font_type = ImageFont.truetype(r"C:\Windows\Fonts\Arial.ttf", 59) txt = Image.new('L', (4677,3307)) d = ImageDraw.Draw(txt) d.text( (3700, 3060), OD, font=font_type, fill=255) w = txt.rotate(90, expand=1) im.paste(ImageOps.colorize(w, (34,0,0), (255,100,84)), (242,60), w) # 让用户选择处理后图片的保存位置 save_path = input("请输入处理后图片的保存路径:") im.save(save_path) print("图片处理完成啦!")
这个方案不需要额外依赖,新手也能快速理解和修改。
2. 支持拖放图片到脚本(更方便)
如果不想让用户每次输入路径,可以让他们直接把图片拖到脚本图标上,脚本通过命令行参数读取路径:
import sys import os from PIL import Image, ImageFont, ImageDraw, ImageOps # 检查是否有拖放的文件 if len(sys.argv) < 2: print("请把空白图片拖到这个脚本图标上哦!") input("按回车键退出...") sys.exit() # 获取拖放的图片路径 image_path = sys.argv[1] im = Image.open(image_path) OD = "需要添加的文本内容" font_type = ImageFont.truetype(r"C:\Windows\Fonts\Arial.ttf", 59) txt = Image.new('L', (4677,3307)) d = ImageDraw.Draw(txt) d.text( (3700, 3060), OD, font=font_type, fill=255) w = txt.rotate(90, expand=1) im.paste(ImageOps.colorize(w, (34,0,0), (255,100,84)), (242,60), w) # 自动保存到原图片目录,命名为result.png save_path = os.path.join(os.path.dirname(image_path), "result.png") im.save(save_path) print(f"处理完成!图片已保存到:{save_path}")
用户只需要拖一下图片就能完成操作,体验更好。
二、把空白图片嵌入脚本,实现单文件分发
完全可以做到!我们可以把空白图片转换成Base64编码,直接嵌入到脚本里,这样只需要发送一个.py文件给用户就行,步骤如下:
1. 先把空白图片转成Base64字符串
运行这个小脚本,把你的空白图片转换成Base64:
import base64 with open("你的空白图片路径.png", "rb") as img_file: base64_str = base64.b64encode(img_file.read()).decode('utf-8') print(base64_str)
把输出的长字符串复制下来。
2. 嵌入到主脚本中
把复制的Base64字符串粘贴到主脚本里,解码后直接使用:
import base64 from PIL import Image, ImageFont, ImageDraw, ImageOps from io import BytesIO # 这里粘贴你刚才得到的Base64字符串 BLANK_IMAGE_BASE64 = """替换成你的空白图片Base64字符串""" # 解码Base64为图片对象 img_data = base64.b64decode(BLANK_IMAGE_BASE64) im = Image.open(BytesIO(img_data)) OD = "需要添加的文本内容" font_type = ImageFont.truetype(r"C:\Windows\Fonts\Arial.ttf", 59) txt = Image.new('L', (4677,3307)) d = ImageDraw.Draw(txt) d.text( (3700, 3060), OD, font=font_type, fill=255) w = txt.rotate(90, expand=1) im.paste(ImageOps.colorize(w, (34,0,0), (255,100,84)), (242,60), w) save_path = input("请输入处理后图片的保存路径:") im.save(save_path)
这样用户拿到单个脚本就能直接用,不需要额外的图片文件了!
几个新手友好的小提醒
- 记得提醒用户先安装Pillow库:在命令行运行
pip install pillow,不然代码会报错。 - 字体路径
C:\Windows\Fonts\Arial.ttf只在Windows上有效,如果要支持Mac/Linux,可以把字体也用Base64嵌入脚本,或者让用户指定字体路径。 - 代码里的
OD变量一定要提前定义好,不然会出现未定义的错误哦!
内容的提问来源于stack exchange,提问作者Laurence Maskell




