十年前,在網頁上編輯一張圖,意味著上傳它、等伺服器幹活、再下載結果。今天,一個瀏覽器可以壓縮一張 30 MB 的照片、把 PNG 轉成 WebP,或者批次改一堆圖的尺寸,全程不聯絡任何伺服器。讓這個轉變成為可能的,是兩項技術:Canvas 和 WebAssembly。一旦你看清各自在做什麼,它們都不神秘。
Canvas:一塊能觸到每個畫素的畫布

每個現代瀏覽器都自帶 Canvas API——一個你可以用 JavaScript 在上面繪製的空白矩形。它對圖片工具的真正威力不在於畫形狀,而在於 Canvas 讓程式碼能直接訪問一張圖的每一個畫素。
當你把一張照片載入進 canvas,瀏覽器交給你程式碼的是一串數字:每個畫素的紅、綠、藍和 alpha(透明度)值。有了這個,常見操作就變得直接:
- 改尺寸就是把這張畫素網格重新取樣成更小或更大的一張。
- 裁剪就是把一塊矩形區域複製到新的 canvas 上。
- 旋轉和翻轉是繪製前施加的幾何變換。
- 格式轉換發生在你匯出 canvas 時——你要 JPEG、PNG 還是 WebP,瀏覽器就相應地編碼這些畫素。
所有這些都在你自己的裝置上執行,用你的 CPU,條件允許時還用你的 GPU。沒有任何東西被上傳,因為畫素從沒離開過頁面。這就是為什麼 圖片格式轉換 能在你拖進一張 PNG 的瞬間就把它變成 WebP——沒有往返伺服器要等。
WebAssembly:在瀏覽器裡跑出接近原生的速度

Canvas 搞定了常見變換,但有些活需要真正的算力——高質量 JPEG 編碼、PNG 最佳化、跑一個 AI 模型去摳背景。光靠 JavaScript 可能太慢。這時 WebAssembly(常簡稱 Wasm)就登場了。
WebAssembly 是一種緊湊的低層格式,瀏覽器能以接近原生的速度執行它。開發者拿那些用 C、C++、Rust 等語言寫的、久經考驗的高速程式碼——正是驅動桌面影象軟體的同一批庫——把它編譯成 Wasm。瀏覽器隨後在一個緊湊的沙盒環境裡執行這段程式碼,比等價的 JavaScript 快得多。
實際上這意味著,一個瀏覽器標籤頁現在能幹過去得靠伺服器或桌面軟體才能乾的活:用專業級壓縮編碼圖片、剝離後設資料,或跑一個神經網路去背景——全部在本地。
為什麼本地處理既私密又快
把 Canvas 和 WebAssembly 放到一起,好處自然就出來了。
隱私是結構性的,不是一句承諾。因為畫素留在頁面裡,處理在你的 CPU 上跑,根本沒有上傳這一步。沒有你檔案的伺服器副本可儲存、可記錄、可快取、可拿去訓練——因為檔案從沒被傳輸過。你不必信任一份隱私政策;開啟飛航模式、看著工具照常執行,你就能親自驗證。
速度來自把網路整個砍掉。伺服器工具最慢的一步通常是把你的檔案傳上去再傳下來。去掉它,一張 40 MB 的照片處理起來和一張 40 KB 的差不多快。也沒有排隊——你的裝置只處理你這一張圖,不是別人成千上萬張。
還有個多數人想不到的附加好處:因為整個工具不過是程式碼和資源,瀏覽器可以把它快取下來。IMG.DIY 是帶 service worker 的 PWA,所以第一次訪問之後,工具就存在你的裝置上,能離線繼續工作——在飛航模式、在飛機上、在任何地方。壓縮和轉換完全不需要聯網。
老實說,也有取捨
瀏覽器內處理不是魔法,也並非沒有限制。特別大的批次可能會撐爆低端手機的記憶體,因為活用的是你裝置的資源,不是資料中心的。還有少數功能確實需要聯網——任何呼叫外部服務的功能,比如頁面速度檢測,都無法離線執行。去背景是個中間情況:它在本地跑,但要先下載一次模型檔案。
不過對日常那些活——壓縮、轉換、改尺寸、裁剪、旋轉——瀏覽器如今已是一個完整、私密、快速的圖片工作臺,只不過它恰好住在一個標籤頁裡。不上傳、無伺服器、不等待。
