根据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