簡體   English   中英

mozcjpeg - 優化原始圖像

[英]mozcjpeg - optimize original image

我正在嘗試使用 mozcjpeg 優化 sample.jpg,但我希望它壓縮 sample.jpg,而不是創建另一個文件。

我運行這個命令:

mozcjpeg -quality 80 sample.jpg > sample.jpg

我得到

Empty input file

正確的做法是什么?

PS 我有一個每天運行一次的 bash 腳本來優化過去 24 小時內創建的圖像。

只需使用不同的輸出文件名,否則它會立即被覆蓋。

您正在讀取文件並同時覆蓋它。 相反,制作一個中間文件:

tmp_file="$(mktemp)"
mozcjpeg -quality 80 sample.jpg > "${tmp_file}"
mv "${tmp_file}" sample.jpg

anycmd foo.jpg > foo.jpg理解為:

  • shell 將打開foo.jpg進行寫入(覆蓋任何現有數據)。
  • shell 將 fork 並將這個打開的文件設置為 stdout。
  • shell 將執行anycmd foo.jpg

因此,在執行命令時,原始文件已經消失了。 你怎么能解決這個問題?

好吧,您可以按照其他答案中的建議創建一個臨時文件。

或者,您可以使用sponge 它是moreutils包的一部分。

$ whatis sponge
sponge (1)           - soak up standard input and write to a file

該工具允許您編寫:

mozcjpeg -quality 80 sample.jpg | sponge sample.jpg

它起作用是因為sponge將首先讀取所有標准輸入(在內存中),並且只有在標准輸入到達 EOF 后才會打開文件進行寫入。

暫無
暫無

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

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