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

最初と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

関連情報