~によると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
最初と2番目のコマンドで発生したエラーは次のとおりです。
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.
3 番目のコマンドを使用すると端末が中断されますが、最終的に最初の 2 つのコマンドと同じエラー メッセージが生成されます。 4番目のコマンドは次のエラーを生成します。
Aborted
display-im6.q16: improper image header `/tmp/magick-7315YQugjYiINA9c' @ error/miff.c/ReadMIFFImage/507.
たとえば、ImageMagickのクロスプラットフォーム実装ではなく、デフォルトのbashファイル記述子を使用してリダイレクトを実行できます。
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