本文目录导读:

我需要了解一些具体信息才能给出最合适的脚本方案,先问几个关键问题:
我需要了解的信息
-
图片说明来自哪里?
- CSV/Excel 表格中已写好的说明文字?
- 手动输入?
- 从文件名或 EXIF 信息中提取?
-
说明文字要加到哪里?
- 修改图片文件本身的元数据(如 EXIF 的 Description 字段)?
- 生成带文字水印的新图片?
- 写入同名的 .txt 文件/侧边栏文件?
- 导入到照片管理软件(如 Lightroom)的数据库?
-
使用什么操作系统?
- Windows(PowerShell/Batch)
- macOS/Linux(Bash)
常见场景的脚本示例
场景1:将 CSV 中的说明写入图片 EXIF 元数据(Python)
import csv
from PIL import Image
from PIL.ExifTags import Base
import piexif
import os
# CSV 格式:filename, description
# example.csv 内容:
# photo1.jpg,这是第一张照片
# photo2.jpg,这是第二张照片
def add_description_from_csv(csv_path, image_folder):
with open(csv_path, 'r', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
filename, description = row[0], row[1]
image_path = os.path.join(image_folder, filename)
if not os.path.exists(image_path):
print(f"文件不存在: {image_path}")
continue
# 读取图片
img = Image.open(image_path)
# 获取或创建 EXIF 数据
if 'exif' in img.info:
exif_data = piexif.load(img.info['exif'])
else:
exif_data = {'Exif': {}, '0th': {}, '1st': {}, 'GPS': {}, 'Interop': {}}
# 添加说明到 ImageDescription 字段
exif_data['Exif'][piexif.ExifIFD.ImageDescription] = description
# 保存修改
exif_bytes = piexif.dump(exif_data)
img.save(image_path, 'jpeg', exif=exif_bytes)
print(f"已为 {filename} 添加说明: {description}")
# 使用示例
add_description_from_csv('example.csv', './photos/')
场景2:批量添加文字水印到图片(Python + Pillow)
from PIL import Image, ImageDraw, ImageFont
import os
def add_text_watermark(image_folder, descriptions_dict, font_size=30):
"""
descriptions_dict 格式: {'photo1.jpg': '这是说明文字1', 'photo2.jpg': '这是说明文字2'}
"""
for filename, description in descriptions_dict.items():
image_path = os.path.join(image_folder, filename)
if not os.path.exists(image_path):
print(f"文件不存在: {image_path}")
continue
# 打开图片
img = Image.open(image_path).convert('RGBA')
# 创建一个透明层来放文字
txt_layer = Image.new('RGBA', img.size, (255, 255, 255, 0))
draw = ImageDraw.Draw(txt_layer)
# 尝试加载中文字体
try:
font = ImageFont.truetype("arial.ttf", font_size)
except:
# 如果找不到字体,用默认字体
font = ImageFont.load_default()
# 在图片底部添加文字(带半透明背景)
text_position = (10, img.height - font_size - 20)
draw.rectangle([0, img.height - font_size - 30, img.width, img.height],
fill=(0, 0, 0, 128))
draw.text(text_position, description, font=font, fill=(255, 255, 255, 255))
# 合并图层并保存
watermarked = Image.alpha_composite(img, txt_layer)
watermarked = watermarked.convert('RGB') # 转换为 RGB 以保存为 JPEG
watermarked.save(os.path.join(image_folder, f"wm_{filename}"))
print(f"已添加水印: {filename}")
# 使用示例
descriptions = {
'photo1.jpg': '2024年春节聚会',
'photo2.jpg': '公司团建活动'
}
add_text_watermark('./photos/', descriptions)
场景3:批量重命名图片(说明文字作为文件名)
# Windows PowerShell 脚本
# 假设有一个 descriptions.csv 文件,格式:旧文件名,新说明
param(
[string]$csvFile = "descriptions.csv",
[string]$imageFolder = "."
)
Import-Csv $csvFile | ForEach-Object {
$oldName = $_.OldName
$newName = $_.NewDescription + [System.IO.Path]::GetExtension($oldName)
$oldPath = Join-Path $imageFolder $oldName
$newPath = Join-Path $imageFolder $newName
if (Test-Path $oldPath) {
Rename-Item -Path $oldPath -NewName $newName
Write-Host "已重命名: $oldName -> $newName"
} else {
Write-Host "文件不存在: $oldName"
}
}
场景4:交互式批量添加说明(手动输入)
#!/bin/bash
# macOS/Linux Bash 脚本
echo "批量图片说明添加工具"
echo "=================="
# 获取当前目录下所有图片文件
images=(*.jpg *.jpeg *.png *.gif *.bmp 2>/dev/null)
if [ ${#images[@]} -eq 0 ]; then
echo "当前目录下没有找到图片文件"
exit 1
fi
echo "找到 ${#images[@]} 个图片文件"
echo ""
# 为每个图片输入说明
declare -A descriptions
for img in "${images[@]}"; do
echo "当前图片: $img"
read -p "请输入说明文字(输入空行跳过): " desc
if [ -n "$desc" ]; then
descriptions[$img]=$desc
# 可以选择写入同名txt文件
echo "$desc" > "${img%.*}.txt"
echo "已保存说明到 ${img%.*}.txt"
fi
echo ""
done
echo "完成!共处理 ${#descriptions[@]} 个图片"
你需要哪种方案?
请告诉我:
- 你的图片说明数据来源
- 说明要保存到哪里
- 运行环境
我可以根据你的具体情况提供完整的脚本代码。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播