DPI 是儲存在 JPEG 或 PNG 檔案內的一項列印密度指令,並不是衡量影像細節或銳利度的指標。 把數值改成 72 到 600 之間的某個值,只會改寫一個很小的中繼資料欄位——JPEG 是 JFIF density,PNG 是 pHYs——並讓實際的像素網格完全維持原樣。一張 3000 乘 2400 像素的影像,在變更之後仍然是 3000 乘 2400 像素的影像;改變的只是版面軟體或印表機驅動程式所計算出的建議列印尺寸。這個區別很重要,因為在 GIMP 中搜尋如何變更影像 DPI 的人,通常有以下兩種目標之一:保持像素完全不變,只更新列印標籤;或者真的想要產生更多或更少的像素。這是兩種不同的操作,也應該分別處理,因為在停用重新取樣的情況下,GIMP 的「Image > Print Size」執行的是前者,而「Image > Scale Image」執行的是後者。選錯操作,可能會在不知不覺中放大或縮小像素網格、以非預期的方式改變列印銳利度,或做出一次影像本來不需要的 JPEG 重新編碼。

how to change image dpi in gimp
如何在 gimp 中變更影像 dpi

「變更 DPI」在檔案裡實際上做了什麼

根據 W3C JFIF 1.02 規範,JPEG 會把 DPI 儲存在 JFIF APP0 標頭區段中,形式是兩個 16 位元整數加一個單位位元組。PNG 規範則把等效的數值放在 pHYs 區塊中,形式是單一的 32 位元「每公尺像素數」計數值。這兩種格式背後的概念相同:對於輸出裝置上的每一實際英吋,應該從既有的像素網格中取出大約 N 個像素來鋪陳。像素本身不會被動到,經壓縮的影像位元流也不會被動到,檔案結構之所以仍然有效,是因為只有一個很小的標頭欄位被替換而已。

把 DPI 從 72 提高到 300,並不會憑空產生新的像素,不會讓模糊的照片變銳利,不會讓網頁瀏覽器把影像顯示得更清晰,也不會挽救一張低解析度的掃描檔。把數值調低,同樣不會刪除任何像素。印表機、版面配置應用程式,或匯出流程,可能會參考這項中繼資料來計算實際尺寸;相對地,網站通常是依照其 CSS 寬度或容器大小來顯示影像,完全忽略列印用的欄位。

GIMP 的兩條 DPI 路徑:Print Size 與 Scale Image

GIMP 在兩個選單中都會用到 DPI,但兩者的行為截然不同。「Image > Print Size」會開啟一個對話框,讓您變更解析度數值;在停用重新取樣的情況下,它只會把新的 DPI 寫進檔案標頭,同時保持像素尺寸不變。「Image > Scale Image」則相反:它會依整數或小數倍率放大或縮小畫布,這代表實際的像素網格會跟著縮小或放大,細節會透過內插被新增,或因抽減而流失。最常見的錯誤,就是明明想要的是 Print Size,卻用了 Scale Image。

在 GIMP 或瀏覽器中的操作像素尺寸中繼資料 DPI輸出結果看起來如何
Image > Scale Image會改變(重新取樣)由 GIMP 重新計算一份具有指定像素數量與全新 DPI 標籤的新檔案
Image > Print Size(關閉重新取樣)不變更新為輸入的數值同一份檔案,只是 DPI 標頭被改寫
Image DPI Changer不變僅更新 JFIF 或 pHYs 中的數值一份本機副本,不重新編碼、不上傳

如果 GIMP 已經開啟,且您對這套流程很熟悉,Print Size 完全是這個問題的一個有效答案。但如果目標是避免重新編碼、想跳過對話框操作,或是在沒有安裝 GIMP 的電腦上作業,一條只動中繼資料的路徑,能以更低的風險達到相同的結果。

什麼時候您只想變更中繼資料

有幾種情況特別適合只動中繼資料的做法。一位已經匯出好列印用 JPEG 的攝影師,只是需要不同的 DPI 標籤,並不想再做一次破壞性的編碼。一位必須交付符合印刷廠要求之 300 DPI 數值檔案的設計師,也不希望像素網格在不知不覺中被放大一倍。一位使用受限工作筆電、沒有系統管理權限的使用者,則根本無法安裝 GIMP。而任何處理敏感原始檔案的人,可能都偏好一套完全在瀏覽器中執行、不需要上傳檔案的流程。Image DPI Changer 正是為了這種情況而打造:它接受單一張最大 25 MiB 的 JPEG 或 PNG,讀取任何既有的 JFIF 或 pHYs 數值,寫入一個新的整數 DPI,並回傳一份本機副本。

如何用 Image DPI Changer 在本機更新影像 DPI

  1. 選擇一張最大 25 MiB 的 JPEG 或 PNG 影像,並檢視頁面上顯示的任何已偵測到的列印密度中繼資料。
  2. 輸入一個整數的目標 DPI,例如 72、150、300 或 600;這個數值改變的是 JFIF 或 pHYs 的列印密度欄位,而不是像素尺寸。
  3. 選擇 Update image DPI,下載這份副本,再到目的地的版面配置應用程式或印表機工作流程中確認預期的尺寸。

這款工具完全在瀏覽器中執行。不會上傳任何內容,經壓縮的影像位元組會原樣複製,這項操作也不需要用到畫布,也不需要第二次 JPEG 編碼。若操作失敗,工具會清除舊的結果連結,而不是把先前的檔案當成剛更新好的結果來呈現,因此您下載到的檔案,永遠對應到最近一次的操作。

驗證下載的檔案

下載完成後,請在任何中繼資料檢視工具,或在目的地的版面配置程式中開啟該檔案,確認數值落在該程式實際讀取的位置上。一張 JPEG 可能同時帶有好幾種解析度資訊,包括 APP0 區段中的 JFIF density 欄位,以及 APP1 區段中選填的 EXIF 解析度標籤;不同應用程式可能會選擇信任其中某一種。Image DPI Changer 讀取並寫入 JFIF density 欄位,在您選取檔案後會動態檢視標準的 EXIF 解析度欄位,並回報是否找到可用的既有 JFIF 或 pHYs 密度值。它不會嘗試合併或改寫每一種可能的 EXIF、XMP、ICC、IPTC、相機、GPS 或廠商擴充欄位。

就 PNG 而言,W3C PNG Specification Third Edition 把 pHYs 區塊定義為單一的「每公尺像素數」整數計數值。像 300 這樣的 DPI,會被編碼成 300 ÷ 0.0254 ≈ 11811 像素每公尺,並四捨五入到最接近的整數。把檔案讀回來時,顯示的 DPI 數值可能與您輸入的請求相差一個很小的分數單位。這一點微小的捨入,是 PNG 格式本身的儲存精確度限制,並不代表影像實際像素有任何改變。這種來回轉換的誤差,仍會落在捨入誤差範圍之內,不會對列印出來的尺寸造成任何可見的影響。

一個您可以自行套用的列印尺寸計算

舉一個具體的例子,假設有一張 3000 乘 2400 像素的影像,並把 DPI 設為 300。用像素數除以 DPI,就能得到實際的列印尺寸:

3000 像素 ÷ 300 DPI = 寬 10 英吋

2400 像素 ÷ 300 DPI = 高 8 英吋

同樣是 3000 乘 2400 像素,在 150 DPI 下會得到:

3000 像素 ÷ 150 DPI = 寬 20 英吋

2400 像素 ÷ 150 DPI = 高 16 英吋

請注意,像素從來沒有改變過;唯一改變的,是印表機被告知要把這些既有像素中的多少個塞進每一英吋裡。若要針對不常見的紙張尺寸做更複雜的計算,DPI Converter 能在完全不碰檔案的情況下,算出實際的物理尺寸。

關於 DPI 的常見錯誤

把 DPI 當成品質數值、而不是一項列印密度指令來理解,是大多數錯誤決策的根源。一張低解析度的掃描檔,不會因為改了標籤而多出任何細節,因為來源像素是固定的,印表機並沒有多餘的資訊可以運用。在 Scale Image 中勾選 Quality 內插選項後從 GIMP 匯出檔案,會在不知不覺中放大檔案,並把像素替換成經過平滑處理的近似值,在列印尺寸下實際上可能看起來更模糊。把標示 300 DPI 的 JPEG 交給同時要求最低像素數或特定匯出格式的印刷廠,這樣的準備並不完整;單靠這個標籤,永遠無法滿足像素數量的要求。

同樣值得記住的是,並非每一套程式都讀取同一組中繼資料家族。一張 JPEG 可以同時儲存 JFIF density、EXIF 解析度、XMP 與 ICC 資料,而印表機驅動程式或版面配置應用程式可能只挑其中一種來用。若想更深入了解 DPI 實際上做了什麼、以及列印密度與影像細節之間的差異,關於 不損失品質地變更 DPI 的指南,用稍微不同的角度說明了同一個概念。

什麼時候光靠 DPI 中繼資料還不夠

如果目標是產生更多像素,光改 DPI 中繼資料是沒有用的。一張需要把長邊從 2000 像素放大到 4000 像素的影像,必須交給真正的影像編輯器進行重新取樣。Image Resizer 能在瀏覽器中設定精確的像素尺寸,且不需要上傳檔案。如果問題單純是關於列印版面應該預留多大的實際尺寸,DPI Converter 能根據目前的像素網格與預期的 DPI,算出英吋與公分數值。如果需要編輯的是 DPI 以外的中繼資料欄位,EXIF Editor 能處理一組特定的 JPEG EXIF 版權相關欄位。除非明確就是為此設計,否則這些工具都不會覆寫像素,這也是為什麼把中繼資料變更與像素變更分開處理,能讓列印工作流程維持可預期。

若想深入了解,請參閱 How to Pixelate an Image in GIMP (or Your Browser)