如何將 32MB 的 PNG 檔案轉換為 200Kbs 而不丟失其顏色

如何將 32MB 的 PNG 檔案轉換為 200Kbs 而不丟失其顏色

我有幾張大小為 32MB 的圖像,我想將它們的大小從 32MB 更改為 100Kbs 或任何 KB 大小,而不影響其顏色。

我正在嘗試的命令是:

muhammad@muhammad-mohsin:~/scans$ find . -iname '*.png' -exec mogrify -format jpg "*.png" {} +


muhammad@muhammad-mohsin:~/$ find . -type f -iname \*.png -delete


muhammad@muhammad-mohsin:~/$ find . -iname '*.jpg' -exec mogrify -define jpeg:extent=300kb -strip -quality 90 -scale 90% *.jpg {} +

在這裡,首先我將PNG 轉換為JPG,將其大小從32Mbs 減小到5.8Mbs,一切都保持不變,但當我使用第三個命令時,它會刪除圖像中的背景顏色並使其灰度有點模糊。

但是,文字仍然可讀,但顏色和背景徽標不可讀。

如何使用 Convert、mogrify 或任何其他工具來實現此目的?到目前為止我已經嘗試了所有可能的方法。

這是原始影像的一部分

這是命令後更改圖像的一部分

答案1

這是因為 JPEG 壓縮的工作原理。它嘗試將彼此相似的相鄰像素舍入為相似的值。這會導致細節丟失和塊狀。

當您提高壓縮等級時,這一點會變得更加明顯,即確切地你在做什麼。此外,您也分兩步驟進行:

  1. 無損 (PNG) 到有損 (JPEG) 壓縮。
  2. 有損到有損壓縮。

你會大概透過在最終質量上從無損變為有損來獲得更好的結果,因此僅應用有損壓縮一次,例如jpeg:extent=300kb -strip -quality 90 -scale 90%在第一次轉換中使用。

此外,您沒有提及圖像的大小和細節程度。將其降至 300kB 並保持所需的品質可能不太可行。

若要消除背景斑點,您可以嘗試在某些影像編輯軟體中對文件套用閾值,例如將小於特定灰色陰影的任何內容強制為白色。

然而,無論你做什麼,從 30MB 無損格式壓縮到 300kB 有損格式將要導致品質明顯下降。

答案2

我正在嘗試,find . -iname '*.png' -exec convert -resize 60% -quality 60 "*.jpg" {} +但這不起作用。

參考號https://superuser.com/questions/71028/batch-converting-png-to-jpg-in-linux

$ ls -1 *.png | xargs -n 1 bash -c 'convert -quality 60 "$0" "${0%.*}.jpg"'

將我的範例 31MB.png 轉換為 1.4MB.jpg 。 ....您可能必須重複使用例如$ ls -1 *.PNG | ...等。

參考號@steeldriver 的評論:“稍微好一點的是xargs -d '\n' -n 1

相關內容