带有创建日期的水印 PNG 图像
watermark png image with its created date
我需要用创建日期为我的 png 图像添加水印。
我正在尝试读取 png
个文件 exif data
。但是 linux 上使用 screenshot
工具捕获的 png
文件没有 exif 数据。
我正在使用以下脚本为我的 png 图像添加创建日期水印:
#!/bin/bash
echo "Script for addding time stamp"
date --iso-8601=seconds
shopt -s extglob
find . -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.tif" -o \
-iname "*.tiff" -o -iname "*.png" |
## Go through the results, saving each as $img
while IFS= read -r img; do
## Find will return full paths, so an image in the current
## directory will be ./foo.jpg and the first dot screws up
## bash's pattern matching. Use basename and dirname to extract
## the needed information.
name=$(basename "$img")
path=$(dirname "$img")
ext="${name/#*./}";
## Check whether this file has exif data
if exiv2 "$img" 2>&1 | grep timestamp >/dev/null
## If it does, read it and add the water mark
then
echo "Processing $img...";
convert "$img" -gravity SouthEast -pointsize 22 -fill black \
-annotate +30+30 %[exif:DateTimeOriginal] \
"$path"/"${name/%.*/.time.$ext}";
## If the image has no exif data, use the creation date of the file.
else
echo "No Exif data in $img...";
date=$(stat "$img" | grep Modify | cut -d ' ' -f 2,3 | cut -d ':' -f1,2)
convert "$img" -gravity SouthEast -pointsize 22 -fill black \
-annotate +30+30 "$date" \
"$path"/"${name/%.*/.time.$ext}";
fi
done
预期水印格式输出:
但我需要以下日期格式的水印(就像它的输出 $ date --iso-8601=seconds
)-
2021-11-29T07:46:15+01:00
实际水印格式输出:
但是 png 图片 stat
没有这种格式,所以我的水印是 -
2021-11-29 07:27
任何人都可以建议我如何修改我的脚本以在我的 png 图像上获得预期的水印。
或
有没有其他最好的方法来为 png 图像添加创建日期水印。
请在备用目录中复制几张图片试试这个,因为我还没有测试过。我认为 exiftool
会将文件修改日期添加到您的图像中,以代替 EXIF DateTimeOriginal:
exiftool -v "-FileModifyDate>DateTimeOriginal" *.png
您可以像这样查看图像的所有时间相关数据的摘要:
exiftool -time:all -G1 -a -s SOMEIMAGE.PNG
[System] FileModifyDate : 2021:11:23 09:48:30+00:00
[System] FileAccessDate : 2021:11:27 13:38:21+00:00
[System] FileInodeChangeDate : 2021:11:26 23:41:21+00:00
如果您将 exiftool
标签添加到您的问题中,其中一位专家可能会建议您如何将其更改为仅添加尚不存在的数据。
此外,如果您有大量图像,请考虑使用 GNU Parallel。只需将 [gnu-parallel]
与 image
.
一起放入搜索框中
如果您想调整 stat
命令对图像文件的输出,
你能试试吗:
datestr=$(date --iso-8601=seconds -d @$(stat --printf='%Z\n' "$img"))
假设您的 date
命令支持 -d
选项。
顺便说一句,我已将变量名称更改为 datestr
以避免名称空间
冲突,尽管它是无害的,只是令人困惑。
在 Linux 上,您可以像这样获得您想要的日期格式:
date=$(date -d "@$(stat -c %Y "$img")" --iso-8601=seconds)
stat -c %Y
为 stat
输出使用格式说明符
%Y
为最后修改日期,单位为纪元秒
- GNU
date -d @<epoch-seconds>
指定输入日期,@
指定纪元秒格式
- 然后指定输出格式(
--iso-8601=seconds
)
- BSD/Mac 与
stat
的语法略有不同
我需要用创建日期为我的 png 图像添加水印。
我正在尝试读取 png
个文件 exif data
。但是 linux 上使用 screenshot
工具捕获的 png
文件没有 exif 数据。
我正在使用以下脚本为我的 png 图像添加创建日期水印:
#!/bin/bash
echo "Script for addding time stamp"
date --iso-8601=seconds
shopt -s extglob
find . -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.tif" -o \
-iname "*.tiff" -o -iname "*.png" |
## Go through the results, saving each as $img
while IFS= read -r img; do
## Find will return full paths, so an image in the current
## directory will be ./foo.jpg and the first dot screws up
## bash's pattern matching. Use basename and dirname to extract
## the needed information.
name=$(basename "$img")
path=$(dirname "$img")
ext="${name/#*./}";
## Check whether this file has exif data
if exiv2 "$img" 2>&1 | grep timestamp >/dev/null
## If it does, read it and add the water mark
then
echo "Processing $img...";
convert "$img" -gravity SouthEast -pointsize 22 -fill black \
-annotate +30+30 %[exif:DateTimeOriginal] \
"$path"/"${name/%.*/.time.$ext}";
## If the image has no exif data, use the creation date of the file.
else
echo "No Exif data in $img...";
date=$(stat "$img" | grep Modify | cut -d ' ' -f 2,3 | cut -d ':' -f1,2)
convert "$img" -gravity SouthEast -pointsize 22 -fill black \
-annotate +30+30 "$date" \
"$path"/"${name/%.*/.time.$ext}";
fi
done
预期水印格式输出:
但我需要以下日期格式的水印(就像它的输出 $ date --iso-8601=seconds
)-
2021-11-29T07:46:15+01:00
实际水印格式输出:
但是 png 图片 stat
没有这种格式,所以我的水印是 -
2021-11-29 07:27
任何人都可以建议我如何修改我的脚本以在我的 png 图像上获得预期的水印。
或
有没有其他最好的方法来为 png 图像添加创建日期水印。
请在备用目录中复制几张图片试试这个,因为我还没有测试过。我认为 exiftool
会将文件修改日期添加到您的图像中,以代替 EXIF DateTimeOriginal:
exiftool -v "-FileModifyDate>DateTimeOriginal" *.png
您可以像这样查看图像的所有时间相关数据的摘要:
exiftool -time:all -G1 -a -s SOMEIMAGE.PNG
[System] FileModifyDate : 2021:11:23 09:48:30+00:00
[System] FileAccessDate : 2021:11:27 13:38:21+00:00
[System] FileInodeChangeDate : 2021:11:26 23:41:21+00:00
如果您将 exiftool
标签添加到您的问题中,其中一位专家可能会建议您如何将其更改为仅添加尚不存在的数据。
此外,如果您有大量图像,请考虑使用 GNU Parallel。只需将 [gnu-parallel]
与 image
.
如果您想调整 stat
命令对图像文件的输出,
你能试试吗:
datestr=$(date --iso-8601=seconds -d @$(stat --printf='%Z\n' "$img"))
假设您的 date
命令支持 -d
选项。
顺便说一句,我已将变量名称更改为 datestr
以避免名称空间
冲突,尽管它是无害的,只是令人困惑。
在 Linux 上,您可以像这样获得您想要的日期格式:
date=$(date -d "@$(stat -c %Y "$img")" --iso-8601=seconds)
stat -c %Y
为stat
输出使用格式说明符%Y
为最后修改日期,单位为纪元秒- GNU
date -d @<epoch-seconds>
指定输入日期,@
指定纪元秒格式 - 然后指定输出格式(
--iso-8601=seconds
) - BSD/Mac 与
stat
的语法略有不同