Libvips: A CLI VIP especifica o formato de arquivo com pipes

Criado em 6 mai. 2016  ·  4Comentários  ·  Fonte: libvips/libvips

No imagemagick, posso ler e gravar em pipes e especificar seu formato:

cat in.jpg | convert JPG:- -resize 50% PPM:- | jpeg-recompress --ppm -q medium - out.jpg

Nas ferramentas vips cli eu posso usar /dev/stdin ou /dev/stdout, mas não parece haver uma maneira de indicar o formato do arquivo, o que limita o quanto você pode realizar usando pipes em vips.

Seria ótimo se os vips permitissem especificar/substituir o carregador/protetor para imagens de entrada e saída.

Sintaxe de exemplo:

cat in.jpg | vips resize -[load=jpeg] -[save=ppm] 0.5 | jpeg-recompress --ppm -q medium - out.jpg

Isso também permitiria o encadeamento de várias operações vips cli sem pagar a E/S de disco para gravar em arquivos .v.

enhancement

Comentários muito úteis

Isso é adicionado em 8.9. Você pode escrever, por exemplo.

aws s3 cp s3://mybucket/input.jpg - | \
  vips thumbnail_source [descriptor=0] .jpg 128 | \
    aws s3 cp - s3://mybucket/output.jpg

As notas de lançamento têm mais informações:

https://libvips.github.io/libvips/2019/12/11/What 's-new-in-8.9.html

Todos 4 comentários

Oi Felix, isso já foi falado um pouco, existe até um branch experimental com suporte para streams:

https://github.com/jcupitt/libvips/tree/load-from-stream

Ele pode executar este programa C:

https://gist.github.com/jcupitt/ff21f5b8d1dd6ba54c6f

Ele lê uma série de imagens de um soquete, processa-as e as envia para outro soquete, tudo sem ter que carregar a imagem inteira. O objetivo era oferecer suporte a buckets da AWS, mas também funcionaria para pipes de linha de comando, com uma pequena quantidade de trabalho extra.

Houve um longo bate-papo sobre isso sobre este assunto:

https://github.com/lovell/sharp/issues/30

Desisti um pouco, depois deu um bitrot, depois tentei limpá-lo pronto para mesclar ao master, e tive alguns problemas. Precisa de um pouco mais de trabalho ainda :/

Eu não estava falando sobre streaming de várias imagens, embora isso fosse um recurso legal.

A ideia principal é poder definir o carregador ou o saver (ou aproximadamente o tipo de arquivo), quando não puder ser inferido a partir da extensão do arquivo. Tenho certeza de que há mais problemas para tipos de arquivos que exigem busca, mas, por exemplo. jpeg, png, ppm funcionariam bem. Isso também seria útil, quando houver várias implementações que podem emitir ou carregar o mesmo tipo de arquivo. Por exemplo, o PDF pode ser carregado com pdfload ou magickload.

Acho que você precisaria do material de streaming para /dev/stdin funcionar. Por exemplo, isso falha:

$ cat k2.jpg | vips jpegload /dev/stdin x.jpg
VipsJpeg: Not a JPEG file: starts with 0x87 0xe5
...

Os carregadores de arquivos esperam poder abrir sua entrada várias vezes. O material de streaming adicionaria um buffer de leitura que tornaria isso possível - as muitas imagens de um stream são apenas um bônus.

Isso é adicionado em 8.9. Você pode escrever, por exemplo.

aws s3 cp s3://mybucket/input.jpg - | \
  vips thumbnail_source [descriptor=0] .jpg 128 | \
    aws s3 cp - s3://mybucket/output.jpg

As notas de lançamento têm mais informações:

https://libvips.github.io/libvips/2019/12/11/What 's-new-in-8.9.html

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

doronAtuar picture doronAtuar  ·  4Comentários

adamu picture adamu  ·  3Comentários

codecitizen picture codecitizen  ·  4Comentários

revathi-murali picture revathi-murali  ·  3Comentários

kloczek picture kloczek  ·  3Comentários