使用 ImageMagick 和 GNU Parallel 合并每对图像

Merging every pair of images with ImageMagick and GNU Parallel

我正在尝试合并文件夹中的每对图像,并使用 imagemagick 将结果合并到一个 PDF 文件中,并使用 GNU Parallel 并行处理该过程。

parallel -N2 convert \( {1} -rotate 30 \) {2} +append miff:- ::: *jpeg | convert - out.pdf

问题是我需要旋转第一个参数并且发生错误。

Error: /bin/sh: -c: line 0: syntax error near unexpected token `01.jpeg'
/bin/sh: -c: line 0: `convert ( 01.jpeg -rotate 30 ) 02.jpeg +append miff:-'
...

我如何处理 GNU parallel 接收的参数之一?

首先,你最好使用parallel -k,否则输出的顺序会错误。

其次,您不需要括号来确保您的 -rotate 仅适用于第一张图片,因为此时您还没有加载第二张图片。

所以,您正在查看:

parallel -k -N2 convert {1} -rotate 30 {2} +append miff:- ::: *jpeg | convert - out.pdf

或者也许:

parallel -k -N2 'convert {1} -rotate 30 {2} +append miff:-' ::: *jpeg | convert - out.pdf

为了回答您的问题,ImageMagick 将对加载堆栈中的所有图像应用运算符(如 -rotate)。所以:

convert im1.png im2.png -rotate ...

将旋转两个图像。鉴于:

convert im1.png -rotate 90 im2.png ...

只会旋转第一张图片。如果你只想旋转第二个,你有 2 个选择,要么将第二个放在括号中,这样 -rotate 只适用于它:

convert im1.png \( im2.png -rotate 90 \) ...

或者,先加载第二张图片并旋转,然后加载第一张并交换顺序:

convert im2.png -rotate 90 im1.png +swap ...