由于之前笔记本暴毙数据找不回,今天又重写了一个新的脚本,处理的对象是魅族手机里面的照片。因为我的小窝相册仍然有一部分图片丢失,但依旧是可以找到原图的。
这次写的脚本直接将步骤打给 GPT 来做了,它写的基本满足需求,就是有一些细节需要注意一下:
- 遍历图片前先通过接口匹配图片的 ID
- 使用 ExifTool 工具的时候需要覆盖原图,并设置作者名称
- 处理好图片之后再通过接口上传完成覆盖
考虑到脚本涉及到接口数据,再加上数据丢失的经历,这次我就把它贴出来了,但隐藏了一些关键参数。
#!/bin/bash
server="https://test.paul.ren/api"
token=""
# 创建文件夹 output
mkdir -p output
# 遍历当前文件夹下的所有 jpg 文件
for file in *.jpg; do
# 发送 GET 请求获取 JSON 数据
response=$(curl --header "token: $token" -s "$server/media/get/?origin_name=$file")
# 提取 id
id=$(echo "$response" | jq -r '.data.id')
# 如果没有 id,则跳过当前循环
if [ -z "$id" ]; then
echo "匹配 $file 失败"
continue
fi
echo "匹配 $file 成功,id 是 $id"
# 存储图片名到变量
filename=$(basename "$file")
# 判断图片是竖屏的还是横屏的
# 使用 identify 命令判断图片的宽度和高度
width=$(identify -format "%w" "$file")
height=$(identify -format "%h" "$file")
# 指定图片大小
if [ $width -ge $height ]; then
new_size="2000x1500"
else
new_size="1500x2000"
fi
# 使用 ImageMagick 处理图片
convert "$file" -quality 80 -resize "$new_size" "output/$filename"
# 使用 exiftool 抹掉图片的 gps 信息,并设置作者名称为 Paul
exiftool -overwrite_original -gps:all= -artist="奇趣保罗" -CreatorTool= "output/$filename"
# 提交该文件给服务器
curl -X POST \
--header "token: $token" \
--location "$server/api/media/update" \
--form "id=$id" \
--form "photo=@output/$filename" \
--form 'IGNORE_UPDATE_TIME="1"'
done