拖放照片至此處
或點擊瀏覽 — JPEG、PNG、WebP,張數不限
輸入你需要的大小 — 200 KB、1 MB、5 MB — 剩下的品質數字交給工具去找。
檔案不會離開你的瀏覽器 — 全部在本機處理。
拖放照片至此處
或點擊瀏覽 — JPEG、PNG、WebP,張數不限
幾乎沒有人真的想要「品質 74」。大家想要的是一張能通過上傳表單的照片:欄位寫著上限 2 MB,手機裡那張是 5.4 MB,要做的事就是把一個數字壓到比另一個小,而且照片不能爛掉。所以這頁的主角是目標大小模式。把上限打進去(200 KB、2 MB,表單要求多少就多少),品質那個數字讓工具自己去算:先抓一個值編碼,量出結果真正的位元組數,然後把剩下的範圍砍一半再編一次,從兩邊夾逼,直到落在你給的數字下面一點點。這就是對品質參數做二分搜尋,通常四到六輪收斂,而且每一輪秤的都是真的編碼結果,不是估出來的大小。用手拉滑桿其實在做同一件事,只是慢很多、算術也差很多。
預設不換格式:JPEG 進 JPEG 出、PNG 進 PNG 出,壓完直接丟回原本那張圖待的地方,副檔名一樣,也不會有相容性的意外。真的想知道換格式能省多少,就把並排比較打開,同一張圖會另外編成 WebP 和 AVIF,三種格式在達到你目標的品質下的大小並排給你看。差距通常是真的,該講清楚的取捨也一併講:WebP 現在幾乎不會在任何要緊的地方出問題;AVIF 常常在大小上贏一大截,代價是編碼慢得多(大張照片是幾秒,不是幾毫秒),而且比較舊的軟體、部分桌面看圖程式和少數 CMS 到現在還是打不開。看數字,然後想著這張圖要送去哪裡再決定。
整個資料夾丟進來,一輪跑完,每個檔案都列出壓縮前大小、壓縮後大小、最後停在哪個品質、省了幾成,最上面再給整批的總計一個大字。全部都在你的瀏覽器裡:檔案在本機讀取、在 Web Worker 裡編碼,最後以一般的下載交還給你。不上傳這件事是隱私的答案,但在這頁它同時是速度的答案 — 走伺服器的壓縮工具得把每張圖傳上去、再把每個結果抓下來,所以 20 張的批次等於在壓縮到第一個位元組之前,先做完 40 次網路傳輸。這裡沒有往返成本要付,天花板只有你自己的機器,而且把網路關掉照樣能用。
有件事要講白:這是有損的重新編碼。圖片會被解碼成像素、再以較低的品質編一次回去,所以像素真的會變 — 省下來的 KB 正是從這裡來的,也是為什麼一張 1200 萬像素的照片壓到 100 KB 會比壓到 800 KB 看起來鬆散。如果你要的是「檔案變小但像素完全不動」,該去的是移除中繼資料那一頁:它以位元組為單位把 EXIF、GPS 和縮圖那幾塊切掉,從頭到尾不把圖片交給解碼器,所以輸出跟原檔逐位元相同,只是輕了幾 KB 到幾百 KB。無損能省的就是這麼多,所以它沒辦法把 5 MB 的照片弄到 2 MB 以下 — 但如果你只是需要少個幾百 KB,先拿免費的那份,真的不夠再回來這裡。
不是任何東西的 80%:不是像素的 80%、不是原檔大小的 80%,也不是某種絕對畫質的 80%。對 JPEG 來說,這個數字是在挑一組量化表,決定每個 8×8 區塊裡的細節被四捨五入得多兇;對 WebP 和 AVIF 來說,它撥動的是那個編碼器裡對應的旋鈕。刻度是各家編碼器自己的,所以 A 編碼器的品質 80 跟 B 編碼器的品質 80,既不是同一張畫面也不是同一個大小;同樣一個 80,套在雜訊滿滿的夜景和一張平平的截圖上,檔案大小可以差好幾倍。這就是目標大小模式存在的理由:跨圖片還有意義的數字只有「出來的檔案有多大」,所以這個工具直接去量它,而不是叫你相信那個旋鈕。
因為你在第一代損失上面又付了第二代。一張 JPEG 本身就已經是解碼器重建出來的畫面,連瑕疵一起算在內。壓它等於把那個重建結果解碼、再量化一次,而且這次會把上一代留下的區塊邊緣和振鈴當成「值得保留的真細節」,這是位元預算最糟的花法。反覆幾次,邊緣和文字周圍就會爛成大家熟悉的那種糊。所以手上有原始檔的時候 — 相機檔、PNG 匯出、編輯軟體的母檔 — 就從那個檔一次壓到位,不要拿壓過的再壓。只有 JPEG 也沒關係,好好壓一次到目標大小不會怎樣;真正傷的是壓五次。
不留。重新編碼會走過 canvas,而 canvas 只認得像素,所以輸出完全沒有 EXIF — 沒有 GPS 座標、沒有相機型號、沒有拍攝時間,也沒有嵌入的縮圖。對大多數人來說這是附加好處而不是損失,壓過的照片同時也是清乾淨的照片。但如果你要清掉的只有中繼資料,就不要為了這個去壓縮:移除中繼資料那一頁會以位元組為單位刪掉那些區塊,像素逐位元保持原樣,比「拿一代畫質換同一個結果」明顯划算。
因為 PNG 是無損格式,格式裡根本沒有品質這個旋鈕可以轉。每個像素都被原封不動存下來,所以要讓 PNG 變小只有兩條路:把同樣的像素存得更聰明,或是讓不同的像素種類變少。這個工具只做前者:oxipng 會重跑 filter 與 Deflate 的選擇,替同一張圖找到更好的編碼方式,所以回來的是同一張圖、只是變小。它不會縮減色盤 — 丟掉顏色是有損的加工,而你選 PNG 正是因為它無損,我們不該在背後替你這樣做。效果比 JPEG 小也比較難預測 — 平面 UI 的截圖可能直接少一半,用 PNG 存的照片幾乎不動。如果一張照片型的 PNG 非得壓進某個硬性大小,誠實的答案是轉成 JPEG 或 WebP,而這頁會用數字告訴你那樣要付什麼代價。
搜尋會在品質範圍的最低點撞牆,工具會直接說出來,回報它壓到的最小值,而不是默默塞一個超過你上限的檔案給你。4000×3000 的照片沒辦法變成一張 20 KB 而還有人想看的 JPEG — 走到那一步,能動的旋鈕已經不是品質而是像素數了。先把尺寸縮小再試一次(同一張照片的 1600 px 寬版本大約只要六分之一的位元組),或者把輸出換成 WebP 或 AVIF,同樣的大小它們能給出比 JPEG 明顯好看的品質。並排比較就是為了讓你親眼確認這兩招哪一招真的救得了你。
不會。檔案用 File API 在本機開啟,解碼與重新編碼都在你自己這個分頁的 Web Worker 裡完成,成品是瀏覽器自己產生的下載。這頁是靜態檔案,背後沒有 API,所以沒有地方可以上傳、沒有佇列要排、不會加浮水印,除了你機器的記憶體以外也沒有檔案大小上限。載入過一次之後把網路關掉照樣能用 — 這剛好也是這個說法最簡單的驗證方式:真的需要伺服器的頁面,網路一斷就當場停擺。
Need a different format, not just a smaller file? Convert here.
Only want the metadata gone with the pixels untouched? Strip it losslessly.
Compare the compressed output against the original, pixel by pixel.