使用 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 ...
我正在尝试合并文件夹中的每对图像,并使用 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 ...