# 行程表圖片縮小 27%，字會糊掉嗎？Oxipng 無損壓縮實測

- 網址：https://blog.valenvan.uk/posts/oxipng-oxipng.html
- 發布日期：2026-10-16
- 測試設備：Mac mini M4 Pro（12 核、64GB）
- 專案：oxipng/oxipng（https://github.com/oxipng/oxipng），MIT 授權
- 測試版本：Oxipng 10.2.1，官方 aarch64 發行檔；當日原始碼 21c1fff
- 實測影片：https://www.youtube.com/shorts/d-SbwJHobuE

## 重點摘要

- Oxipng 10.2.1 將自製 1600×1000 行程表 PNG 從 47,262 縮至 34,622 位元組，減少26.74%，錄影單次耗時0.190秒。
- 自製行程表壓縮前後尺寸相同，解碼為RGBA後逐像素完全相同。
- 800×600固定亂數雜訊PNG僅縮小0.13%，不能把行程表的縮幅套用到所有圖片。
- 透明區填入亂數RGB的自製圖使用--alpha後縮小99.64%，白底合成像素相同，但原始RGBA不同；這是特殊測試圖。
- **結論：** 本次行程表PNG可保留尺寸與像素並省26.74%，雜訊圖僅省0.13%。
- **適合：** 願意使用指令、希望保留原尺寸與像素的PNG圖表使用者；本次只驗證自製樣本。
- **不適合：** 需要保證每張圖片大幅縮小者；需要透明區原始RGB不變者不宜使用--alpha。

| 實測項目 | 結果 |
|---|---|
| 行程表PNG | 47,262→34,622 bytes；26.74%；0.190秒；RGBA相同 |
| 雜訊PNG | 1,442,625→1,440,783 bytes；0.13%；RGBA相同 |
| 透明圖預設最佳化 | 1,034,862→1,033,867 bytes；0.10%；RGBA相同 |
| 透明圖 --alpha | 1,034,862→3,751 bytes；99.64%；原始RGBA不同、白底合成相同 |

要把行程表、教學截圖或圖卡傳給朋友，常見的兩難是：檔案想小一點，又不想讓文字變糊。把圖片長寬縮小當然能省空間，但有沒有保留原尺寸的做法？這次用免費開源的 Oxipng 10.2.1，拿自製行程表 PNG、隨機雜訊圖與透明圖案實測，先看檔案變多小，再核對像素有沒有被改動。

測試設備是 Mac mini M4 Pro（12 核、64GB）；本次單次執行的時間只供參考，不能當成所有電腦的速度保證。受測程式是官方 v10.2.1 的 aarch64 發行檔，測試當天原始碼版本為 21c1fff，授權為 MIT。全程使用自己產生的圖片，沒有拿私人照片或客戶文件測試。

## 一張行程表，省下 26.74%

第一張素材是 1600×1000 的行程表式圖卡，有標題、色塊與五列活動資訊，使用 Pillow 預設設定存成 PNG，並沒有刻意先存成完全不壓縮的大檔。原檔是 47,262 位元組，壓縮後剩 34,622 位元組，省下 12,640 位元組，也就是 26.74%。錄影這次執行花了 0.190 秒。

![行程表壓縮指令與逐像素核對結果](https://blog.valenvan.uk/img/oxipng-oxipng-article_1.png)

實際使用的核心指令如下。`--out` 把結果另存，讓原檔留著，方便比較。

```bash
oxipng -o 2 --out planner_small.png planner.png
```

`-o 2` 是這次選用的最佳化等級。輸出尺寸仍是 1600×1000；把兩張圖都解碼成 RGBA，再逐一比較所有像素，結果完全相同。這次省空間來自檔案編碼的改變，不是把圖片縮小，也不是只憑肉眼說「看起來差不多」。但這張本來就只有約 47 KB，省下的絕對容量其實有限，不必為每張小圖多做一道手續。

## 換張圖，結果幾乎沒差

第二張是固定亂數種子產生的 800×600 雜訊 PNG。原本 1,442,625 位元組，輸出 1,440,783 位元組，只省 1,842 位元組，縮幅 0.13%。RGBA 仍完全相同，卻幾乎沒省到空間。

這不是照片測試，也不能推論所有照片都只能省這麼多；它是這次刻意加入的反例：同一套指令，面對不同圖案，效果會差很多。不能看到第一張省了約四分之一，就承諾所有 PNG 都有一樣的縮幅。

## 透明最佳化的界線

第三張是自製透明圖案，透明區刻意填入亂數 RGB，用來確認 `--alpha` 的行為，並非一般圖檔的代表樣本。

```bash
oxipng -o 2 --alpha --out badge_small.png transparent.png
```

這張從 1,034,862 降到 3,751 位元組，縮小 99.64%。把前後兩張合成在白底上，像素相同；直接比較原始 RGBA 卻不同。原因是完全透明區原先藏著的顏色數值被改變。官方 README 也提醒，這項設定在技術上可能屬於有損轉換。若後續工作需要保留透明區原始色值，就不要只看畫面一樣便認定資料完全相同。

![透明圖最佳化後，原始 RGBA 不同而白底合成相同](https://blog.valenvan.uk/img/oxipng-oxipng-article_2.png)

我的結論是：需要保留尺寸與文字清晰度、又願意使用指令的人，可以拿自己的 PNG 先另存試一次；只想按個按鈕的人，這次測的指令介面會多一道門檻。本次沒有測 JPG、動畫 PNG、大量批次，也沒有測任何圖形介面的包裝軟體。不要拿特殊透明圖的 99.64% 當一般圖片的預期成績。

專案與使用說明：https://github.com/oxipng/oxipng

授權：MIT。測試日期：2026-10-16。
