You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动