我有url链接到图像文件,我想从互联网上检索。
我可以使用curl
下载文件,而不会出现以下问题:
curl "https://...web address..." > myfileName;
图像文件是各种类型的,一些.bmp
一些.jpg
等我一直在使用sip
在Mac osx上的终端每个转换为.png
文件使用:
sips -s format png downloadFileName --out newFileName.png
这对于我保存为downloadedFileName
的文件很有效,不管起始文件类型如何。
由于我有许多文件要处理,所以我想将curl下载的输出直接传输到sips中,而不保存中间文件。
我尝试了以下方法(它结合了我的两个工作步骤,但没有中间文件名):
curl "https://...web address..." | sips -s format png --out fileName.png
并得到一个无文件错误:Error 4: no file was specified
.
我已经搜索了sip手册页,但没有找到管道输入的参考,也没有找到有用的答案搜索SO或谷歌。
有没有一种方法可以直接在sips中处理使用curl下载的图像,而不需要先保存文件?
我不一定需要使用管道的解决方案,甚至不需要在一行上。我有一个脚本,它将循环通过几千个URL,只是想避免保存大量的文件,这些文件将在一行后被删除。
我应该补充一点,我也不一定需要使用sips。但是,任何解决方案都必须能够处理未知类型的图像文件(sips做得令人钦佩),因为文件上没有文件扩展名。
谢谢
2条答案
按热度按时间oiopk7p51#
我没有安装sips,但是its manpage表明它不能从stdin读取。但是,如果你使用Bash或ZSH(现在是MacOS默认),你可以使用进程替换,在这个例子中我使用了
convert
,它是ImageMagick的一部分,也可以转换不同的图像类型:执行此操作后,this_is_fine.png将成为目录中唯一没有临时文件的文件
bweufnob2#
显然,
sips
只读取常规文件,这使得它不可能使用/dev/stdin
或命名管道。但是,可以使用成熟且功能丰富的
convert
命令:(首先通过
brew
install imagemagick
或sudo
port
install ImageMagick
安装ImageMagick。)ImageMagick允许使用伪文件名-分别从标准流STDIN(标准输入)和STDOUT(标准输出)读取和写入图像数据。
source,节 *STDIN、STDOUT和文件描述符 *