Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 如何使用imagemagick将两个文件夹中的图像合并到一起?_Image Processing_Imagemagick - Fatal编程技术网

Image processing 如何使用imagemagick将两个文件夹中的图像合并到一起?

Image processing 如何使用imagemagick将两个文件夹中的图像合并到一起?,image-processing,imagemagick,Image Processing,Imagemagick,我有两个文件夹,A和B,其中包含具有相应名称的图像文件 例如,每个文件都包含标签为01.png、02.png、03.png等的文件 如何合并相应的文件,使我有第三个文件夹C,其中包含所有合并的照片,以便两个原件并排放置 我使用的是Linux,如果这有什么变化的话。使用ImageMagick版本6,如果您的图像都是相同的尺寸,并且如果您的系统内存可以将所有输入图像读取到一个命令中,那么您可以使用这样的命令来完成 convert FolderA/*.jpg -set filename:f "%[f]

我有两个文件夹,
A和B
,其中包含具有相应名称的图像文件

例如,每个文件都包含标签为
01.png、02.png、03.png等的文件

如何合并相应的文件,使我有第三个
文件夹C
,其中包含所有合并的照片,以便两个原件并排放置


我使用的是
Linux
,如果这有什么变化的话。

使用ImageMagick版本6,如果您的图像都是相同的尺寸,并且如果您的系统内存可以将所有输入图像读取到一个命令中,那么您可以使用这样的命令来完成

convert FolderA/*.jpg -set filename:f "%[f]" \
   -set option:distort:viewport %[fx:w*2] -distort SRT 0 null: \
   FolderB/*.jpg -gravity east -layers composite FolderC/"%[filename:f]"
首先读取FolderA的所有图像,并将其视口向右扩展两倍宽度

然后,它添加了特殊的内置“null:”以在读取第二个列表之前分离图像列表。然后它读取FolderB中的所有图像

然后将重力设置为“东”后,它将FolderB中的每个图像合成到FolderA中每个相应图像的扩展右半部分上。这将创建并排附加图像的效果

该命令在开头设置一个变量以保存第一个输入文件列表的文件名,然后使用这些文件名作为输出文件名并将其写入FolderC


如果您使用的是ImageMagick版本7,请使用命令“magick”而不是“convert”。

您可以使用一些bash脚本代码来实现这一点。假设您有两个文件夹A和B,其中包含相应的图像名称。您还有一个空文件夹AB来保存结果。然后将ImageMagick与bash循环代码一起使用,您可以执行以下操作:

Collect the names of all the files in folder A and put into an array

Collect the names of all the files in folder B and put into an array

Loop over the number of images in the folders

Process them with ImageMagick +append and save to folder AB

outdir=“/Users/fred/desktop/AB”
aArr=(`find/Users/fred/desktop/A-typef-iname“*.jpg”-o-iname“*.png”`)
numA=“${#aArr[*]}”
bArr=(`find/Users/fred/desktop/B-typef-iname“*.jpg”-o-iname“*.png”`)
numB=“${#巴尔[*]}”
如果[$numA-eq$numB];然后

对于((i=0;i我没有靠近计算机进行彻底测试,但这对我来说似乎是最容易的:

#!/bin/bash

# Goto directory A
cd A

# For each file "f" in A
for f in *.png; do
    # Append corresponding file from B and write to AB
    convert "$f" ../B/"$f" +append ../AB/"$f"
done

或者使用GNU并行,一次完成所有操作

cd A
parallel convert {} ../B/{} +append AB/{} ::: *.png

马克,比我回答的要简单得多!谢谢我的回答,或者其他人,整理出你的问题。如果是这样,请考虑把它当作你的答案——点击投票计数旁边的空心滴答声。如果不是,请说什么不起作用,这样我或其他人可以进一步帮助你。谢谢。
cd A
parallel convert {} ../B/{} +append AB/{} ::: *.png