【发布时间】:2020-08-09 09:01:18
【问题描述】:
历史:我尝试在 linux 目录中的一系列图像上应用水印,将该水印放在图像下方额外创建的空间/边框上。水印和额外空间都会根据它们应用的图像的高度大小调整/创建。
我根据每次保存在某些变量上的图像高度进行各种计算。但是,我不知道如何 a) 使用保存的每个图像的高度计算,或者 b) 将这些计算应用于每个图像,作为“单个终端命令”,例如,将脚本应用于目录中的所有图像。 “用于 DSC*.* 中的图片;进行高度计算.......并保存在该变量中以用于下一个批处理终端命令”
imagemagick 的变量。我如何保存它们以供下次使用,每张图片?
height=`convert DSC__12.jpg -format "%w" info:`
yoff_p50=`convert xc: -format "%[fx:$height/50]" info:`
yoff_p100=`convert xc: -format "%[fx:$height/100]" info:`
yoff_p200=`convert xc: -format "%[fx:$height/200]" info:`
我尝试了以下 linux 终端命令:有更好的优雅(更短?)方式吗?
for pic in DSC*.*;
do height=`convert "$pic" -format "%w" info:`;
yoff_p50=`convert xc: -format "%[fx:$height/50]" info:`;
yoff_p100=`convert xc: -format "%[fx:$height/100]" info:`;
yoff_p200=`convert xc: -format "%[fx:$height/200]" info:`;
convert -background black -gravity NorthWest -extent 0%x0%+0+${yoff_p50} -pointsize ${yoff_p100} -fill white -undercolor '#00000080' -gravity SouthWest -annotate +${yoff_p100}+${yoff_p200} "$(stat -c '%y' "$pic")" "$pic" "${pic//.*}-d.jpg";
done;
for pic in DSC*-d.*;
do height=`convert "$pic" -format "%w" info:`;
yoff_p50=`convert xc: -format "%[fx:$height/50]" info:`;
yoff_p100=`convert xc: -format "%[fx:$height/100]" info:`;
yoff_p200=`convert xc: -format "%[fx:$height/200]" info:`;
convert /home/elias/Data/PHOTOS/watermark_0.png -resize ${yoff_p50}x${yoff_p50}^ /home/elias/Data/PHOTOS/res_watermark_0.png;
composite -dissolve 100% -gravity SouthEast /home/elias/Data/PHOTOS/res_watermark_0.png "$pic" "${pic//.*}-marked.jpg";
done;
ps。如何检查每个 imagemagick 变量保存了哪些值?
- 我发现了如何在 linux 终端中检查变量值:echo ${height}
更新:解决方案:Mark Setchell 的解决方案奏效了。
最后,我运行:..它在 linux 终端上完成了这项工作。
for pic in DSC*.* ; do
#Save either the date of File Creation or Modification on filename
exiftool "-FileName<CreateDate" -d "${pic//.*}_%Y%m%d_%H%M%S.jpg" "$pic" && exiftool "-FileName<FileModifyDate" -d "${pic//.*}_%Y%m%d_%H%M%S.jpg" "$pic" ;
done;
for pic in DSC*.* ; do
# Determine offsets and sizes
read w y1 y2 y3 < <(identify -format "%w %[fx:w/50] %[fx:w/100] %[fx:w/200]" "$pic");
ts=$(stat -c '%y' "$pic");
convert -size ${w}x${y1} xc:black -gravity SouthWest \
-pointsize ${y2} -fill white -undercolor '#00000080' -annotate +${y2}+${y3} "$ts" \
\( /home/elias/Data/PHOTOS/res_watermark_0.png -resize "${y1}x${y1}^" \) -gravity East -composite \
"$pic" +swap -append "${pic//.*}-marked.jpg";
done
【问题讨论】:
-
你可以使用 v7 ImageMagick 吗?你能展示一下图像在这个处理之前和之后的样子吗?你为什么要分两遍(两个循环)?当然,您可以只循环一次图像吗?
-
Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org Copyright: © 1999-2017 ImageMagick Studio LLC License: http://www.imagemagick.org/script/license.php Features: Cipher DPC Modules OpenMP Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff wmf x xml zlib -
添加的是图像底部的额外边框,创建/修改日期以及我的水印作为图像。 link
-
请分享您的水印图片以供测试。
-
酷 - 很高兴它对你有用!祝你的项目好运。
标签: imagemagick imagemagick-convert