在 imagemagick 中使用文件描述符的正确语法

在 imagemagick 中使用文件描述符的正确语法

根据ImageMagick 手册,从 v.6.4.9-3 开始支持文件描述符。我正在运行 v.6.9.7-4。但是,我已经能够确定正确的语法。尝试过的例子:

convert 'xc:white[100x100!]' fd:3 ;       display fd:3
convert 'xc:white[100x100!]' miff:fd:3 ;  display fd:3
convert 'xc:white[100x100!]' miff: fd:3 ; display fd:3
convert 'xc:white[100x100!]' miff:fd:3 ;  display miff:fd:3

第一个和第二个命令产生的错误如下:

convert-im6.q16: no encode delegate for this image format `FD' @ error/constitute.c/WriteImage/1176.
display-im6.q16: no decode delegate for this image format `' @ error/constitute.c/ReadImage/504.
display-im6.q16: no data returned `3' @ error/fd.c/ReadFDImage/123.

第三个命令导致终端挂起,但最终产生与前两个命令相同的错误消息。第四个命令产生以下错误:

Aborted
display-im6.q16: improper image header `/tmp/magick-7315YQugjYiINA9c' @ error/miff.c/ReadMIFFImage/507.

可以使用本机 bash 文件描述符而不是 ImageMagick 的跨平台实现来完成重定向;例如,

exec 3> myfifo ; convert 'xc:white[100x100!]' miff:- 1>&3 ; exec 3>&-; exec 3< myfifo; display - 0<&3 ; exec 3<&- ; rm myfifo

或者

exec 3> myfifo ; convert 'xc:white[100x100!]' miff:- 1>&3 ; exec 3>&-; exec 3< myfifo; display <&3 ; exec 3<&- ; rm myfifo

然而,写起来要长得多,而且也不是跨平台的,所以我希望能够弄清楚 ImageMagick 的文件描述符语法。

我的目的是能够从多个 fd 中读取转换命令,例如:

<upstream commands> | convert - fd:3 -append | <downstream commands>

编辑:

我能够使用以下混合方法:

exec 3> myfifo ; convert 'xc:white[100x100!]' miff:- 1>&3 ; exec 3>&-; exec 3< myfifo; display fd:3 ; exec 3<&- ; rm myfifo

但是,尝试写入fd:3不起作用:

exec 3> myfifo ; convert 'xc:white[100x100!]' miff:fd:3 ; exec 3>&-; exec 3< myfifo; display fd:3 ; exec 3<&- ; rm myfifo

相关内容