我有一个脚本使用imagemagick为我的图像添加水印。我已将我的脚本设置为bash作业,但它始终为每张图片添加水印。我希望排除已加水印的图片,但我没有选项将所有水印图片移出某个文件夹。文件夹A包含原始图像。脚本扫描文件夹A为png,jpg为gif图像,并为它们添加水印 - 然后将原始图片移动到子文件夹。每次我的脚本扫描文件夹A时,它都会为已经加水印的所有文件添加水印。我无法更改文件的名称。有没有办法通过将水印文件添加到文件库或其他内容来检查水印文件?我的脚本如下:
#!/bin/bash
savedir=".originals"
for image in *png *jpg *gif do if [ -s $image ] ; then # non-zero
file size
width=$(identify -format %w $image)
convert -background '#0008' -fill white -gravity center \
-size ${width}x30 caption:'watermark' \
$image +swap -gravity south -composite new-$image
mv -f $image $savedir
mv -f new-$image $image
echo "watermarked $image successfully" fi done
答案 0 :(得分:2)
就个人而言,我宁愿不要求我已经加水印的图像名称的其他外部数据库 - 如果该文件与图像分离,如果将它们移动到不同的文件夹层次结构或重命名该怎么办?
我的偏好是在图像中设置注释,将每个图像标识为带水印或不带图像 - 然后信息随图像一起传播。因此,如果我为图像添加水印,我会在评论中将其设置为
1
然后,在我加水印之前,我可以查看ImageMagick的convert image.jpg -set comment "Watermarked" image.[jpg|gif|png]
以查看是否已完成:
identify
显然,你可能会更复杂,并提取当前评论并添加" Watermarked"在没有覆盖可能已存在的任何东西的情况下参与其中。或者,您可以在为水印添加水印时设置IPTC作者/版权所有者或图像的版权信息,并将其用作图像是否加水印的标记。
答案 1 :(得分:0)
以下是如何修改/更新当前脚本以添加一种本地数据库文件以跟踪已处理文件的示例:
#!/bin/bash
savedir=".originals"
PROCESSED_FILES=.processed
# This would create the file for the first time if it
# doesn't exists, thus avoiding "file not found problems"
touch "$PROCESSED_FILES"
for image in *png *jpg *gif; do
# non-zero
if [ -s $image ]; then
# Grep the file from the database
grep "$image" "$PROCESSED_FILES"
# Check the result of the previous command ($? is a built-in bash variable
# that gives you that), in this case if the result from grep is different
# than 0, then the file haven't been processed yet
if [ $? -ne 0 ]; then
# Process/watermark the file...
width=$(identify -format %w $image)
convert -background '#0008' -fill white -gravity center -size ${width}x30 caption:'watermark' $image +swap -gravity south -composite new-$image
mv -f $image $savedir
mv -f new-$image $image
echo "watermarked $image successfully"
# Append the file name to the list of processed files
echo "$image" >> "$PROCESSED_FILES"
fi
fi
done