来自复合堆栈的 Imagemagick 命名

Imagemagick naming from composite stack

我想在这里重用复合堆栈中的命名,我想在这里重用堆栈中的文件名 image123?

magick composite -gravity center -geometry +0+200 \( image123.png -set filename:origin %t_op -resize '150%' -colorspace gray \) background.png '%[filename:origin]'.jpg

在大多数情况下使用 ImageMagick v7 时,您不需要使用子命令 "composite"。只需使用 "magick".

要使用输入文件名作为输出文件名,您必须在管理 IM 的内置特殊变量 "filename:" 时做一些小技巧。在命令开头附近,将带有“-set option:var”的变量设置为第一个输入文件的文件名。然后在命令末尾附近使用第一个变量设置特殊的 "filename:" 变量。尝试这样的事情...

magick image123.png -set option:var "%[t]" -resize "150%" \
   -colorspace gray background.png +swap -gravity center \
   -geometry +0+200 -composite -set filename:f "%[var]" "%[filename:f].jpg"

您可能需要将其中一些双引号 " 更改为单引号 '。

你需要使用 magick,而不是 magick composite。后者不支持-set filename。此外,当对 -compose 进行 -compose 时,我认为 -set 文件名不会直接用于叠加图像,仅适用于背景图像。那就是它必须是 magick 命令行中的第一个图像。

但是,这里有一个变通方法,它颠倒图像的顺序,以便首先叠加,然后使用 'dstover' 而不是 'over' 作为组合方法。

背景图片:

叠加图片:

magick \
rose.png -set filename:origin "%t_op" -resize '150%' -colorspace gray \
-background none -gravity center -extent 640x480-0-100 \
logo.png -compose dstover -composite \
'%[filename:origin].jpg'


加法:

这是自动获取尺寸的类似解决方案。

magick logo.png -set option:dims "%wx%h" -write mpr:logo +delete \
rose.png -set filename:origin "%t_op" -resize '150%' -colorspace gray \
-background none -gravity center -extent "%[dims]-0-100" \
mpr:logo -compose dstover -composite \
'%[filename:origin].jpg'