手機照片轉 PDF:為什麼檔案大得驚人,還有一頁會橫著
圖片轉 PDF 會把每張照片以完整像素尺寸放在各自一頁,所以三張 3.2 MB 的手機尺寸 JPEG 變成了 41.5 MB 的 PDF,而一張直式照片出現在橫向頁面上。請先縮小照片再轉換,之後用旋轉處理橫著的那一頁。
圖片轉 PDF會把 JPEG、PNG、GIF 或 BMP 檔案依上傳順序轉成一份 PDF,每張圖片一頁。它不會縮小任何東西,也會忽略手機寫進直式照片裡的旋轉旗標。在一次測試中,三張 3.2 MB 的 JPEG 變成了 41.5 MB 的 PDF,一張標示為直式的照片落在橫向頁面上。請在上傳前先縮小照片,之後再用旋轉修正橫著的頁面。
實例
輸入是三張 4032 × 3024 像素的 JPEG,每張約 3.2 MB(合計 9.7 MB),也就是典型手機相機畫面的像素尺寸。它們是帶有細微雜訊的合成影像,壓縮效果比多數真實照片差;下面每個大小都只是 2026-10-04 對依目前原始碼建置的本機伺服器跑一次的結果,不是保證。請求如下:
curl -s -o IMG_0001.pdf \
-F fileInput=@IMG_0001.jpg -F fileInput=@IMG_0002.jpg -F fileInput=@IMG_0003.jpg \
https://pdf123.xyz/api/v1/convert/img/pdf
| 步驟 | 結果 |
|---|---|
| 3 張 JPEG,4032 × 3024 px | 合計 9.7 MB |
| 圖片轉 PDF | 3 頁,41.5 MB,每頁 4032 × 3024 pt |
| 對該 PDF 使用壓縮 PDF | 39.9 MB,約縮小 4% |
| 同樣 3 張照片先把長邊縮到 1600 px | 合計 1.7 MB |
| 對縮小後的照片使用圖片轉 PDF | 3 頁,6.2 MB,每頁 1600 × 1200 pt |
| 對該 PDF 使用壓縮 PDF | 6.2 MB,沒有變小 |
輸出檔以第一個檔案命名,所以上面下載的是 IMG_0001.pdf。
為什麼 10 MB 的照片會變成 41 MB
JPEG 把照片存成有損壓縮的區塊。圖片轉 PDF 並不會把這些位元組複製進 PDF,而是先解碼每張圖片,轉成 8 位元 RGB,再用無損的 Flate 壓縮存放原始像素。一張 4032 × 3024 的畫面是 3660 萬位元組的 RGB(4032 × 3024 × 3)。這次 Flate 把它壓到每頁約 13.8 MB,仍是原本 JPEG 的四倍多。同樣三張照片各放三份,做出了 124.6 MB 的 PDF。
這也解釋了壓縮那幾列。壓縮 PDF 會重新壓縮串流並打包物件;它不會降低影像取樣,也不會重新編碼影像。像素已經用 Flate 壓縮過,可以再去掉的東西很少(原因)。要得到較小的檔案,辦法是在建立 PDF 之前減少像素。
還有第二個代價。每一頁的大小取決於它的圖片,一個像素對應一個 point,所以 4032 像素的照片會做出 56 英寸寬的頁面。檢視器會把它縮放到視窗大小,印表機會縮放到紙張大小,但頁面框並不是 A4 或 Letter。表單沒有紙張大小、符合方式、色彩類型或自動旋轉的選項,伺服器也不讀取 API 欄位 fitOption、colorType 或 autoRotate。
先縮小,再轉換
請在上傳前先縮小照片。在 Mac 上,sips -Z 1600 IMG_0001.jpg --out small1.jpg 就能做到。任何系統上都可以用 ImageMagick:
magick IMG_0001.jpg -resize 1600x1600 -quality 85 small1.jpg
兩者都會把 4032 × 3024 的照片變成 1600 × 1200。在這次測試中,三張 JPEG 從 9.7 MB 降到 1.7 MB,三頁的 PDF 從 41.5 MB 降到 6.2 MB。在一張 Letter 紙上,1600 像素橫跨 11 英寸約是 145 dpi:拍下來的表單讀得清楚,小字則偏粗糙。請依你需要讀清楚的最小文字來決定尺寸,不要只看檔案大小的目標。
大小之所以要顧慮兩次,是因為後續的工具也有上限。單一請求本體限制為 100 MiB。上面那份 124.6 MB 的 PDF 送到壓縮 PDF 時,被以 413(payload_too_large)拒絕。解法見大型 PDF 上傳被拒時。
橫著的那一頁
許多手機會把直式照片存成橫向的像素,再加上一個 EXIF 方向標籤,告訴檢視器要旋轉它。相片應用程式通常會遵守這個標籤。圖片轉 PDF 不會讀它:一張標為方向 6(順時針旋轉 90°)的 1600 × 1200 JPEG,產生了橫向的 1600 × 1200 頁面。
修正方式是旋轉 PDF:輸入頁碼,這裡是 1,角度填 90。結果在該頁設定了 /Rotate 90,所以檢視器顯示的是正的。標籤為另一個方向(方向 8)的照片請用 270,上下顛倒的(方向 3)請用 180;這次只測試了方向 6。旋轉是為頁面設定絕對角度,而不是在目前角度上累加,而且不會重新編碼影像。如果不想逐頁修正,可以在轉換前先用相片應用程式旋轉照片並另存一份。
這個工具會拒絕什麼
- HEIC 與其他格式。 頁面接受
.png、.jpg、.jpeg、.gif和.bmp。真正的 HEIC 檔案回傳 400,unsupported_file_type;請先匯出成 JPEG。 - 不是圖片的檔案。 把 PDF 上傳到這個端點,回傳同樣的 400,訊息為「The file is not a supported image.」
- SVG。 SVG 檔案同樣得到 400。
- 可搜尋的文字。 拍下來的頁面中的文字仍是像素。OCR 轉 Markdown回傳的是 Markdown 文字;它不會為這份 PDF 加上文字層(運作方式)。
- 透明度。 圖片會轉成 RGB,alpha 色版會被丟掉。
寄出前檢查
開啟 PDF,依序把頁數和照片對照一次。頁面順序就是上傳順序;在一次測試中,先上傳直式 PNG、再上傳橫式 PNG,直式那頁就排在最前面。然後在附加檔案之前看一下檔案大小。