使用Imagemagick,每次使用时保存其变量

使用Imagemagick,每次使用时保存其变量,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,历史:在linux上,我尝试在目录中的一系列图像上应用水印,将水印标记放在图像下方额外创建的空间/边框上。水印和额外空间的大小/创建取决于应用它们的图像的高度大小 我根据每次保存在某些变量上时处理的图像高度进行各种计算。但是,我不知道如何a)使用保存的每个图像的高度计算,将脚本应用于目录中的所有图像,或b)将这些计算应用于每个图像,例如“单终端命令”。“对于DSC中的pic**;做高度计算。。。。。。。并保存在该变量处,以用于下一批终端命令“ imagemagick的变量。我如何保存它们以供下次

历史:在linux上,我尝试在目录中的一系列图像上应用水印,将水印标记放在图像下方额外创建的空间/边框上。水印和额外空间的大小/创建取决于应用它们的图像的高度大小

我根据每次保存在某些变量上时处理的图像高度进行各种计算。但是,我不知道如何a)使用保存的每个图像的高度计算,将脚本应用于目录中的所有图像,或b)将这些计算应用于每个图像,例如“单终端命令”。“对于DSC中的pic**;做高度计算。。。。。。。并保存在该变量处,以用于下一批终端命令“

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终端命令:是否有更好的优雅(更短?)方法

附:如何检查每个imagemagick变量保存的值

  • 我发现了如何在linux终端中检查变量值:echo${height}
更新:解决方案:马克·塞切尔的解决方案奏效了

最后,我运行:…它在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
DSC*中pic的
;do
#在文件名上保存文件创建或修改的日期

exiftool“-FileName可能还可以进一步改进,但我会选择以下内容:

#!/bin/bash

for f in DSC* ; do
   # Determine offsets and sizes
   read w y1 y2 y3 < <(identify -format "%w %[fx:w/50] %[fx:w/100] %[fx:w/200]" "$f")

   # Get timestamp - different on macOS. You want: ts=$(stat -c '%y' "$f")
   ts=$(stat -f "%Sm%n" "$f")

   convert -size ${w}x${y1} xc:black -gravity SouthWest \
      -pointsize ${y2} -fill white -undercolor '#00000080' -annotate +${y2}+${y3} "$ts"  \
      \( watermark.png -resize "${y1}x${y1}^" \) -gravity East -composite \
      "$f" +swap -append watermarked-"$f".jpg
done
#/bin/bash
对于DSC*中的f;做
#确定偏移量和大小

读取wy1 y2 y3<在一个ImageMagick命令中保存变量的另一种方法是使用declare

declare `convert xc: -format "yoff_p50=%[fx:$height/50]\nyoff_p100=%[fx:$height/50]\nyoff_p200=%[fx:$height/200]\n" info:`

例如:

declare `convert rose: -format "ww=%[fx:w]\nhh=%[fx:h]\n" info:` echo "ww=$ww; hh=$hh;"


你会使用v7 ImageMagick吗?你能展示一下图像处理前后的样子吗?为什么你要在两次传球(两个循环)中完成?当然,您可以只循环一次图像?
版本:ImageMagick 6.9.7-4 Q16 x86_64 20170114http://www.imagemagick.org 版权所有:©1999-2017 ImageMagick Studio LLC许可证:http://www.imagemagick.org/script/license.php 功能:密码DPC模块OpenMP代理(内置):bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff wmf x xml zlib
添加的是图像下方的额外边框、创建/修改日期以及我的水印图像。请分享您的水印图像进行测试。酷-很高兴它为您工作!祝你的项目好运。
declare `convert rose: -format "ww=%[fx:w]\nhh=%[fx:h]\n" info:` echo "ww=$ww; hh=$hh;"
ww=70; hh=46;