Libvips: Vips CLI spécifie le format de fichier avec des canaux

Créé le 6 mai 2016  ·  4Commentaires  ·  Source: libvips/libvips

Dans imagemagick, je peux lire et écrire dans des tubes et spécifier leur format :

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

Dans les outils vips cli, je peux utiliser /dev/stdin ou /dev/stdout, mais il ne semble pas y avoir de moyen d'indiquer le format de fichier, ce qui limite ce que vous pouvez accomplir en utilisant des pipes dans vips.

Ce serait formidable si vips permettait de spécifier/remplacer le chargeur/économiseur pour les images d'entrée et de sortie.

Exemple de syntaxe :

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

Cela permettrait également d'enchaîner plusieurs opérations vips cli sans payer les entrées/sorties du disque pour écrire dans des fichiers .v.

enhancement

Commentaire le plus utile

Ceci est ajouté en 8.9. Vous pouvez écrire par ex.

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

Les notes de version contiennent plus d'informations :

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

Tous les 4 commentaires

Salut Félix, on en a un peu parlé, il y a même une branche expérimentale avec le support des streams :

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

Il peut exécuter ce programme C :

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

Il lit une série d'images à partir d'un socket, les traite et les envoie vers un autre socket, le tout sans avoir à charger l'image entière. L'objectif était de prendre en charge les compartiments AWS, mais cela fonctionnerait également pour les canaux de ligne de commande, avec une petite quantité de travail supplémentaire.

Il y a eu une longue conversation à ce sujet:

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

J'ai abandonné un peu, puis ça a bitroté, puis j'ai essayé de le nettoyer prêt à fusionner pour maîtriser, et j'ai rencontré quelques problèmes. Il y a encore un peu de travail à faire :/

Je ne parlais pas de diffuser plusieurs images en continu, même si ce serait une fonctionnalité intéressante.

L'idée principale est de pouvoir définir le chargeur ou l'économiseur (ou à peu près le type de fichier), lorsqu'il ne peut pas être déduit de l'extension du fichier. Je suis sûr qu'il y a plus de problèmes pour les types de fichiers qui nécessitent une recherche, mais par exemple. jpeg, png, ppm fonctionnerait bien. Cela serait également utile lorsque plusieurs implémentations peuvent émettre ou charger le même type de fichier. Par exemple, un PDF peut être chargé avec pdfload ou magickload.

Je pense que vous auriez besoin des éléments de streaming pour que /dev/stdin fonctionne. Par exemple, cela échoue :

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

Les chargeurs de fichiers s'attendent à pouvoir ouvrir leur entrée plusieurs fois. Le truc du streaming ajouterait un tampon de lecture qui rendrait cela possible - les nombreuses images d'un flux ne sont qu'un bonus.

Ceci est ajouté en 8.9. Vous pouvez écrire par ex.

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

Les notes de version contiennent plus d'informations :

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

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

revathi-murali picture revathi-murali  ·  3Commentaires

nattfodd picture nattfodd  ·  5Commentaires

AKlein920 picture AKlein920  ·  3Commentaires

adamu picture adamu  ·  3Commentaires

BorntraegerMarc picture BorntraegerMarc  ·  3Commentaires