我有一组图像,我可以montage
在它们上使用 Imagemagick 命令来生成具有透明背景的蒙太奇图像文件(我们称之为fgimg
)。现在我有另一个现有图像(我们称之为bgimg
),我想使用(在使用convert
命令进行一些特殊处理后)作为 的背景fgimg
,这可以在同一convert
命令中实现。fgimg
在这一点上,避免将临时文件写入磁盘似乎是微不足道的,只需通过管道将 的标准输出montage
传输到convert
.
我的问题是我正在应用的特殊处理bgimg
将需要一些我事先不知道的图像属性知识fgimg
(例如,调整大小bgimg
以具有与 相同的大小)。如何在命令中检索和使用这些信息?fgimg
convert
注意:我在 Linux 上使用 Imagemagick 版本 6.9.7-4。
我将在下面包含一些命令以进一步详细说明问题。
以下命令fgimg
从一组输入图像生成蒙太奇图像。输出采用“特殊”miff
格式(这似乎最适合稍后处理的临时输出),并且具有透明背景,以便以后可以应用实际背景。这里的其他选项大部分都不重要,但重点是无法提前确定输出大小(维度)。
montage input_*.jpg -tile 5x -border 2 -geometry '200x200>+20+20' \
-gravity center -set label '%f\n%G' -background none -fill white \
-title 'Sample Title' miff:fgimg
接下来,我有另一个输入图像bgimg.jpg
。我想在将其用作背景之前对其进行一些处理fgimg
。一般来说,处理可能非常复杂,但在这个例子中,我想:
- 调整大小
bgimg.jpg
以适应尺寸,fgimg
无需任何裁剪; - 在边缘周围应用淡入黑效果;
- 使其大小与 相同
fgimg
,背景为黑色; - 将其与
fgimg
生成最终输出相结合。
请注意,我需要fgimg
两个地方的大小。我可以先将其提取到一个 shell 变量中:
size=$(identify -format '%G' miff:fgimg)
然后我可以在一个convert
命令中完成上述所有步骤(注意$size
使用了两次):
convert "bgimg.jpg[$size]" -gravity center \
\( +clone -fill white -colorize 100% -bordercolor black \
-shave 20 -border 20 -blur 0x20 \) -compose multiply -composite \
-background black -compose copy -extent $size \
miff:fgimg -compose over -composite final_out.jpg
现在问题来了:我想避免将临时文件写入fgimg
磁盘。
我可以在and命令中替换miff:fgimg
为,然后将一个管道传递给另一个:. 但是我该如何处理?miff:-
montage
convert
montage ... | convert ...
$size
我尝试使用文件描述符 ( miff:fd:3
) 但这似乎不起作用,对此问题的评论证实了这一点。
有没有办法在不创建临时文件的情况下做到这一点(在 Imagemagick v6 中)?