sintaxe correta para uso de descritores de arquivo com imagemagick

1

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
    
por user001 30.08.2017 / 22:46

0 respostas