![如何將 32MB 的 PNG 檔案轉換為 200Kbs 而不丟失其顏色](https://rvso.com/image/1070945/%E5%A6%82%E4%BD%95%E5%B0%87%2032MB%20%E7%9A%84%20PNG%20%E6%AA%94%E6%A1%88%E8%BD%89%E6%8F%9B%E7%82%BA%20200Kbs%20%E8%80%8C%E4%B8%8D%E4%B8%9F%E5%A4%B1%E5%85%B6%E9%A1%8F%E8%89%B2.png)
我有幾張大小為 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 壓縮的工作原理。它嘗試將彼此相似的相鄰像素舍入為相似的值。這會導致細節丟失和塊狀。
當您提高壓縮等級時,這一點會變得更加明顯,即確切地你在做什麼。此外,您也分兩步驟進行:
- 無損 (PNG) 到有損 (JPEG) 壓縮。
- 有損到有損壓縮。
你會大概透過在最終質量上從無損變為有損來獲得更好的結果,因此僅應用有損壓縮一次,例如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
”