imagemagickでは、パイプの読み取りと書き込みを行い、パイプの形式を指定できます。
cat in.jpg | convert JPG:- -resize 50% PPM:- | jpeg-recompress --ppm -q medium - out.jpg
vipscliツールでは/ dev / stdinまたは/ dev / stdoutを使用できますが、ファイル形式を示す方法がないようです。これにより、vipsでパイプを使用して達成できる量が制限されます。
vipsが入力および出力画像のローダー/セーバーを指定/オーバーライドできるようになれば素晴らしいと思います。
構文例:
cat in.jpg | vips resize -[load=jpeg] -[save=ppm] 0.5 | jpeg-recompress --ppm -q medium - out.jpg
これにより、.vファイルへの書き込みにディスクI / Oを支払うことなく、複数のvipscli操作をチェーンすることもできます。
こんにちはフェリックス、これは少し話されています、ストリームをサポートする実験的なブランチさえあります:
https://github.com/jcupitt/libvips/tree/load-from-stream
このCプログラムを実行できます。
https://gist.github.com/jcupitt/ff21f5b8d1dd6ba54c6f
ソケットから一連の画像を読み取り、処理して、別のソケットに送信します。すべて、画像全体をロードする必要はありません。 目的はAWSバケットをサポートすることでしたが、コマンドラインパイプでも機能し、わずかな追加作業が必要です。
この問題については長い間おしゃべりがありました。
https://github.com/lovell/sharp/issues/30
私は少しあきらめ、それからそれはビット腐敗しました、そして私はそれをマスターにマージする準備ができてクリーンアップしようとしました、そしていくつかの問題にぶつかりました。 まだもう少し作業が必要です:/
複数の画像をストリーミングすることについては話していませんでしたが、それはすばらしい機能です。
主なアイデアは、ファイル拡張子から推測できない場合に、ローダーまたはセーバー(または大まかにファイルタイプ)を設定できるようにすることです。 シークが必要なファイルタイプにはもっと多くの問題があると確信していますが、たとえば。 jpeg、png、ppmは正常に機能します。 これは、同じファイルタイプを発行またはロードできる実装が複数ある場合にも役立ちます。 たとえば、PDFはpdfloadまたはmagickloadのいずれかでロードできます。
/ dev / stdinが機能するにはストリーミング関連のものが必要だと思います。 たとえば、これは失敗します。
$ cat k2.jpg | vips jpegload /dev/stdin x.jpg
VipsJpeg: Not a JPEG file: starts with 0x87 0xe5
...
ファイルローダーは、入力を数回開くことができることを期待しています。 ストリーミング関連のものは、これを可能にする読み取りバッファを追加します-ストリームのものからの多くの画像は単なるボーナスです。
これは8.9で追加されました。 あなたは例えば書くことができます。
aws s3 cp s3://mybucket/input.jpg - | \
vips thumbnail_source [descriptor=0] .jpg 128 | \
aws s3 cp - s3://mybucket/output.jpg
リリースノートには、より多くの情報があります。
https://libvips.github.io/libvips/2019/12/11/What's-new-in-8.9.html
最も参考になるコメント
これは8.9で追加されました。 あなたは例えば書くことができます。
リリースノートには、より多くの情報があります。
https://libvips.github.io/libvips/2019/12/11/What's-new-in-8.9.html