簡體   English   中英

將使用 curl 檢索到的圖像通過管道傳輸到 sips 以更改格式而不保存中間文件

[英]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 imagemagicksudo port install ImageMagick

ImageMagick 允許使用偽文件名 - 分別從標准流 STDIN(標准輸入)和 STDOUT(標准輸出)讀取和寫入圖像數據。

sourceSTDIN 部分、 STDOUT 部分和文件描述符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM