Libvips: Vips CLI 使用管道指定文件格式

创建于 2016-05-06  ·  4评论  ·  资料来源: libvips/libvips

在 imagemagick 中,我可以读取和写入管道并指定它们的格式:

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

在 vips cli 工具中,我可以使用 /dev/stdin 或 /dev/stdout,但似乎没有办法指示文件格式,这限制了您在 vips 中使用管道可以完成的工作。

如果 vips 允许为输入和输出图像指定/覆盖加载器/保护程序,那就太好了。

示例语法:

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

这也将允许链接多个 vips cli 操作,而无需支付磁盘 i/o 来写入 .v 文件。

enhancement

最有用的评论

这是在 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

所有4条评论

嗨 Felix,这已经讨论了一点,甚至还有一个支持流的实验分支:

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 可以正常工作。 当有多个实现可以发出或加载相同的文件类型时,这也会很有帮助。 例如,可以使用 pdfload 或 magickload 加载 PDF。

我认为您需要 /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

此页面是否有帮助?
0 / 5 - 0 等级