De acordo com o manual do ImageMagick , os descritores de arquivos são suportados a partir da versão 6.6.9 -3. Estou executando v.6.9.7-4. No entanto, consegui determinar a sintaxe correta. Exemplos tentados:
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
O erro produzido pelo primeiro e segundo comandos é o seguinte:
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.
O terceiro comando faz com que o terminal seja interrompido, mas eventualmente produz a mesma mensagem de erro dos dois primeiros comandos. O quarto comando produz o seguinte erro:
Aborted
display-im6.q16: improper image header '/tmp/magick-7315YQugjYiINA9c' @ error/miff.c/ReadMIFFImage/507.
O redirecionamento pode ser realizado usando descritores de arquivos bash nativos em vez da implementação multiplataforma do ImageMagick; por exemplo,
exec 3> myfifo ; convert 'xc:white[100x100!]' miff:- 1>&3 ; exec 3>&-; exec 3< myfifo; display - 0<&3 ; exec 3<&- ; rm myfifo
ou
exec 3> myfifo ; convert 'xc:white[100x100!]' miff:- 1>&3 ; exec 3>&-; exec 3< myfifo; display <&3 ; exec 3<&- ; rm myfifo
No entanto, isso é muito mais longo para escrever e também não é multi-plataforma, então eu estou esperando para poder descobrir a sintaxe do descritor de arquivo do ImageMagick.
Minha intenção é poder ler de vários fds para um comando de conversão, por exemplo:
<upstream commands> | convert - fd:3 -append | <downstream commands>
Editar:
Consegui usar a seguinte abordagem híbrida:
exec 3> myfifo ; convert 'xc:white[100x100!]' miff:- 1>&3 ; exec 3>&-; exec 3< myfifo; display fd:3 ; exec 3<&- ; rm myfifo
Tentar escrever no fd:3
, no entanto, não funciona:
exec 3> myfifo ; convert 'xc:white[100x100!]' miff:fd:3 ; exec 3>&-; exec 3< myfifo; display fd:3 ; exec 3<&- ; rm myfifo