[英]Piping an image retrieved using curl to sips to change format without saving intermediate file
我有 url 個指向我想從 inte.net 檢索的圖像文件的鏈接。
我可以使用curl
下載文件而不會出現問題:
curl "https://...web address..." > myfileName;
圖像文件有多種類型,有些是.bmp
,有些是.jpg
等。我一直在 Mac osx 的終端中使用sip
將每個文件轉換為.png
文件,使用:
sips -s format png downloadFileName --out newFileName.png
這適用於我保存為downloadedFileName
的文件,無論起始文件類型如何。
由於我有很多文件要處理我想將 pipe curl 的 output 直接下載到 sips 中,而不保存中間文件。
我嘗試了以下(它結合了我的兩個工作步驟,沒有中間文件名):
curl "https://...web address..." | sips -s format png --out fileName.png
並得到一個無文件錯誤: Error 4: no file was specified
。
我搜索了 sip 手冊頁,但找不到管道輸入的參考,也無法找到搜索 SO 或谷歌的有用答案。
有沒有辦法直接在sips中處理使用curl下載的圖像而不先保存文件?
我不一定需要使用 pipe 的解決方案,甚至不需要在線。 我有一個腳本,它會循環瀏覽幾千個 url,只是想避免保存大量文件,這些文件稍后會被刪除。
我應該補充一點,我也不一定需要使用 sips。 但是,任何解決方案都必須能夠處理未知類型的圖像文件(sips 的表現令人欽佩),因為文件上沒有文件擴展名。
謝謝
我沒有安裝 sips,但它的聯機幫助頁表明它無法從標准輸入讀取。 但是,如果您使用 Bash 或 ZSH(MacOS 現在默認),您可以使用進程替換,在這個例子中我使用convert
它是 ImageMagick 的一部分並且也可以轉換不同的圖像類型:
$ convert <(curl -s https://i.kym-cdn.com/entries/icons/mobile/000/018/012/this_is_fine.jpg) this_is_fine.png
$ file this_is_fine.png
this_is_fine.png: PNG image data, 800 x 450, 8-bit/color RGB, non-interlaced
這樣做之后 this_is_fine.png 將是目錄中唯一沒有臨時文件的文件
顯然sips
只讀取常規文件,這使得它無法使用/dev/stdin
或命名管道。
但是,可以使用成熟且功能豐富的convert
命令:
$ curl -sL https://picsum.photos/200.jpg | convert - newFilename.png
$ file newFilename.png
newFilename.png: PNG image data, 200 x 200, 8-bit/color RGB, non-interlaced
(首先通過brew
install imagemagick
或sudo
port
install ImageMagick
)
ImageMagick 允許使用偽文件名 - 分別從標准流 STDIN(標准輸入)和 STDOUT(標准輸出)讀取和寫入圖像數據。
source 、 STDIN 部分、 STDOUT 部分和文件描述符
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.