Libvips: Vips CLI spezifiziert das Dateiformat mit Pipes

Erstellt am 6. Mai 2016  ·  4Kommentare  ·  Quelle: libvips/libvips

In imagemagick kann ich aus Pipes lesen und schreiben und ihr Format angeben:

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

In den vips-CLI-Tools kann ich /dev/stdin oder /dev/stdout verwenden, aber es scheint keine Möglichkeit zu geben, das Dateiformat anzugeben, was die Möglichkeiten der Verwendung von Pipes in vips einschränkt.

Es wäre großartig, wenn vips den Loader/Saver für Eingabe- und Ausgabebilder spezifizieren/überschreiben könnte.

Beispielsyntax:

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

Dies würde auch das Verketten mehrerer vips-CLI-Operationen ermöglichen, ohne die Festplatten-E/A für das Schreiben in .v-Dateien zu bezahlen.

enhancement

Hilfreichster Kommentar

Dies wird in 8.9 hinzugefügt. Du kannst zB schreiben.

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

Die Versionshinweise enthalten weitere Informationen:

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

Alle 4 Kommentare

Hallo Felix, darüber wurde schon ein bisschen gesprochen, es gibt sogar einen experimentellen Zweig mit Unterstützung für Streams:

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

Es kann dieses C-Programm ausführen:

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

Es liest eine Reihe von Bildern aus einem Socket, verarbeitet sie und sendet sie an einen anderen Socket, ohne das gesamte Bild laden zu müssen. Das Ziel bestand darin, AWS-Buckets zu unterstützen, aber es würde mit ein wenig zusätzlicher Arbeit auch für Befehlszeilen-Pipes funktionieren.

Es gab ein langes Gespräch darüber zu diesem Thema:

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

Ich gab für eine Weile auf, dann verrottete es, dann versuchte ich, es aufzuräumen, um es mit dem Master zusammenzuführen, und stieß auf einige Probleme. Da muss noch etwas gearbeitet werden :/

Ich habe nicht davon gesprochen, mehrere Bilder zu streamen, obwohl das eine coole Funktion wäre.

Die Hauptidee ist, den Loader oder Saver (oder grob den Dateityp) einstellen zu können, wenn er nicht aus der Dateierweiterung geschlossen werden kann. Ich bin mir sicher, dass es mehr Probleme für Dateitypen gibt, die gesucht werden müssen, aber z. jpeg, png, ppm würde gut funktionieren. Dies wäre auch hilfreich, wenn es mehrere Implementierungen gibt, die denselben Dateityp ausgeben oder laden können. Zum Beispiel könnte PDF entweder mit pdfload oder magickload geladen werden.

Ich denke, Sie benötigen das Streaming-Zeug, damit /dev/stdin funktioniert. Dies schlägt beispielsweise fehl:

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

Die Dateilader erwarten, dass sie ihre Eingabe mehrmals öffnen können. Das Streaming-Zeug würde einen Lesepuffer hinzufügen, der dies möglich machen würde – die vielen Bilder von einem Stream-Ding sind nur ein Bonus.

Dies wird in 8.9 hinzugefügt. Du kannst zB schreiben.

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

Die Versionshinweise enthalten weitere Informationen:

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen