# 圖片壓縮 壓到指定大小

說個大小，剩下的它來算。

> 把 JPEG、PNG 或 WebP 壓到你要的大小，100 KB、2 MB 都行。全程在瀏覽器裡跑，不上傳，不註冊，斷網也能用。

本頁是一個完全在你的瀏覽器裡執行的互動式工具，地址是 https://abox.tools/zh-TW/compress-image/。你交給它的任何內容都不會被上傳。下面是這個頁面用文字對該工具的全部說明；要使用它，請開啟這個地址。

## 你的圖片**不會上傳**。這裡根本沒有伺服器。

壓縮在你自己的瀏覽器裡、用你自己的硬體完成，用的是瀏覽器本來就帶的編碼器。這個工具沒有任何聯網功能，不取東西，也不發東西。就算真有，這個頁面的另一頭也沒有伺服器能接住一張圖。

- ✗ 不上傳
- ✗ 不註冊
- ✗ 不限大小
- ✓ 斷網能用
- ✓ 開源

## 圖片怎麼壓到指定大小

1. **選好你的圖片。** 拖到下面的方框裡，或者點開自己挑。瀏覽器直接從你的硬碟上讀，這期間沒有東西發出去。
2. **填上人家要求的那個大小。** 上傳框說什麼都不收你照片，那多半是 100 KB；申報系統常見 500 KB；網頁要開得快，2 MB。最常用的四個數字直接做成了按鈕。
3. **按「壓到這個大小」。** 每張圖會被反覆編碼幾遍，工具一步步逼近那個既能塞進去、畫質又最高的等級。本來就沒超標的檔案，原樣放行，一個位元組都不動。
4. **看看代價有多大，然後下載。** 每個結果都寫明存成了什麼格式、用了哪一檔畫質、尺寸有沒有變，以及量出來跟原圖有多接近。按「對比」，兩張圖並排放著看。

## 說得更細的版本

[怎麼把圖片壓到指定的檔案大小](https://abox.tools/zh-TW/guides/compress-an-image-to-a-target-size/): 上傳框要 500 KB，你的照片有 4 MB。一個大小限制到底要你付出什麼，先動哪個設定，以及 PNG 為什麼不像 JPEG 那樣能壓。

## 工具箱裡還有

- [圖片縮放](https://abox.tools/zh-TW/resize-image/): 說個尺寸，拉個框，挑個格式。
- [HEIC 轉 JPG](https://abox.tools/zh-TW/heic-to-jpg/): iPhone 拍的照片，換成什麼都打得開的格式。
- [證件照製作](https://abox.tools/zh-TW/id-photo/): 選好國家，它就照那個國家的規定，一字不差地辦。
- [圖片堆疊](https://abox.tools/zh-TW/stack-images/): 二十張變一張，不用傳二十次，也不用 RAW 轉換器。

## 常見問題

### 我的圖片會傳到什麼地方去嗎？

不會。解碼、壓縮、測量，全由你自己的瀏覽器在你自己的硬體上完成，用的是瀏覽器內建的 JPEG、PNG 和 WebP 編碼器。這個工具沒有任何聯網功能，不取東西，也不發東西。頁面的 `Content-Security-Policy` 把它可能聯的地址全列了出來，沒有一個是本站的。

### 它怎麼做到剛好壓到那個大小？

試出來的。沒有哪個公式能把一個畫質等級換算成位元組數，這完全取決於圖片本身。所以工具把圖編碼好幾遍，一路找答案。它從畫質上限往下折半逼近，大約八次編碼就能定位到那個塞得進去、畫質又最高的等級。頁面上每一個大小都是真編出來的檔案，不是估算。

### 所謂「損失最小」，具體指什麼？

三件很具體的事。第一，本來就沒超標的圖原樣放行，不重新編碼。第二，先花畫質，後動解析度，而且畫質只降到壓縮痕跡開始露出來那一檔為止。再往下，工具改成把圖片做小、把畫質提回去，因為畫素少一點但個個乾淨，比畫素多一堆卻全糊了好看。第三，一旦找到塞得進去的結果，搜尋還會往回頂，把剩下的額度用滿。你要 500 KB，就不會拿回一個 300 KB 的檔案。

### 每個結果上的 SSIM 和 PSNR 是什麼？

是這次壓縮的代價，做法是把結果解碼回來跟原圖逐一比對。SSIM 比的是區域性的明暗、對比和結構，比數一數多少畫素變了更接近人眼在意的東西，大約在 0.98 以上，兩張圖並排看已經很難分辨。PSNR 是傳統的那個分貝值。兩個數都在你自己的機器上算，也都擺出來，好讓「損失很小」這句話是能核對的，而不只是嘴上說說。

### 它能讀、能寫哪些格式？

你的瀏覽器能解碼的它都能讀，實際上就是 JPEG、PNG、WebP、GIF、BMP，現在多數瀏覽器還包括 AVIF。寫出來的是 JPEG、PNG 和 WebP，因為瀏覽器內建的編碼器就這三種。選「自動」時，它保持檔案原來的格式，只有在「保持原格式就得縮尺寸、或者畫質會明顯掉下去」的時候才換成 WebP。

### 為什麼 PNG 壓不下去多少？

因為 PNG 是無損的，根本沒有畫質這個旋鈕可擰。想讓一個 PNG 變小，只能減畫素或者減顏色，所以選了 PNG，工具只能靠縮尺寸去夠那個目標。圖片要是照片，換 JPEG 或 WebP 能離目標近得多，而且看上去完全沒問題。要是 logo 或者帶透明的截圖，WebP 能留住透明，換成 JPEG 那塊地方會被填成白色。

### 壓縮會把 EXIF 和 GPS 資訊一起去掉嗎？

會，屬於順帶的效果。壓縮就是把圖解碼成畫素、再把畫素編回去，而一張畫布上只有畫素，不帶任何標籤，所以位置、相機型號、時間戳這些乾脆就沒寫進新檔案。你要是只想清掉後設資料、畫面別動，那該用 [EXIF 檢視與清除](https://abox.tools/zh-TW/exif-editor/)，它只改容器，不重新壓縮畫面。

### 免費嗎？要註冊嗎？

免費，沒有帳號，不用登入，沒有試用期，也沒有水印。檔案的數量和大小同樣沒有上限，因為沒有哪臺伺服器在為它們掏錢，工作是在你自己的機器上乾的。本站帶廣告，經費就是這麼來的，廣告拿不到關於你圖片的任何資訊。

### 斷網能用嗎？

能。頁面開一次之後斷網，它照常運作。這也是證明「什麼都沒上傳」最省事的辦法。一個把圖片送出去壓縮的工具，拔線那一刻就停了。

## 這條隱私承諾怎麼核實

- **你的圖片沒地方可去。** Content-Security-Policy 把這個頁面允許聯的地址全列了出來，沒有一個是本站的。這裡沒有能收檔案的介面，程式碼裡也沒有一行會把檔案發出去，就算真有那麼個介面也一樣。
- **這裡沒有任何東西會去聯網取資料。** 整個 `src/` 裡，一個 `fetch`、一個 `XMLHttpRequest`、一個 `sendBeacon` 都找不到。壓縮這一步就是 `canvas.toBlob`，用的是你瀏覽器裡早就裝好的那個編碼器。
- **那些數字是量出來的，不是報上去的。** 檔案大小、畫質等級、SSIM 比對，全在這個頁面上算出來，也全擺給你看。這個儲存庫裡沒有哪個統計事件會帶上檔名、大小、數量或者結果。
- **Google 載入了什麼，又拿不到什麼。** 廣告指令碼和統計指令碼來自 Google，捐助按鈕來自 Buy Me a Coffee。關於你圖片的資訊，一條都沒給它們。讀檔案、壓縮、測量的每一行程式碼都從本站發出，也都擺在儲存庫裡。
- **斷網照樣能用。** 斷開網路，這個工具跟原來一模一樣，因為它本來就沒有聯網這一步。這是最省事的一條證明。

**你可以自己核對。**上面這些不用你信。這個頁面是儲存庫裡的模板和配置產生出來的，構建指令碼你能讀，也能自己跑一遍，跑出來的結果就提交在 `dist` 分支上。拿實際發給你的內容，跟你自己從原始碼構建出來的結果對一遍就知道了： https://github.com/A-Box-of-Tools/website

最值得先讀的幾個檔案：`config/site.toml` 裡是 Content-Security-Policy，`src/compress.js` 裡是決定畫質花多少的那次搜尋，`src/measure.js` 裡是「視覺相似度」這個數字背後的比對。
