Extract Images From PDF 會匯出已經儲存在 PDF 內部的影像物件,在其中一個常見情況下,它能夠回傳文件的原始 JPG 位元組,而不是重新算繪的快照。DCTDecode 濾鏡是 PDF 中用來表示內嵌 JPEG 串流的名稱,而該工具會特別處理這種情況,保留位元組不變,並將下載檔案命名為 .jpg。第二個支援的情況是 DeviceRGB 或 DeviceGray 色彩空間中、未帶遮罩的 8 位元 FlateDecode 影像,它並不是以獨立的影像檔案形式存在,因此該工具會使用瀏覽器原生的 DecompressionStream 將原始像素串流解開、繪製到本地 canvas 上,然後將結果寫成 PNG。其他所有情況(包括 JPX、JBIG2、LZW、索引色盤、CMYK、軟遮罩、影像遮罩、預測器以及鏈式濾鏡)都會被辨識但略過,因為強行將它們走 JPG 路徑只會產生損壞的檔案。這表示單一 PDF 會依據每張原始影像的嵌入方式,產生混合的 JPG 與 PNG 下載。

extract images from pdf to jpg
Extract Images From PDF to JPG:格式、限制與步驟

萃取與點陣化:兩種不同的任務

許多搜尋「如何 extract images from PDF to JPG」的讀者,其實是想抓取在文件製作時被置入的個別照片、標誌或掃描檔,而不是擷取整個頁面的螢幕截圖。這個區別對影像品質很重要。頁面點陣化器會將 PDF 頁面算繪成單一張 JPG 或 PNG 圖片,包含文字、向量圖形,以及所有內嵌影像被重新編碼成的一張大型點陣圖。而像 Extract Images from PDF 這樣的萃取器則是在物件層級運作:它使用 pdf-lib 走訪間接物件表,透過 PDFRawStream 找到影像 XObject,並在可能的情況下將每個物件以其儲存的原始位元組回傳。

對於 DCTDecode(JPEG)串流,會保留其儲存的位元組。對於 FlateDecode RGB 或灰階串流,則會在瀏覽器中將有限範圍的原始像素解碼後重新編碼為 PNG。其他所有情況下,工具會記錄一筆略過並繼續處理。如果目標是作者放入 PDF 的素材,萃取路徑能提供原始資料,而不是重新壓縮的頁面快照。

如果目標是包含算繪文字與向量形狀的整個可見頁面,請改用 PDF to JPG Converter 或 PDF To PNG。那些是具有可調縮放比例的頁面點陣化器。選錯類別是下載結果不如預期最常見的原因:讀者原本預期取得內嵌的 JPG 素材,卻收到整頁快照,反之亦然。

下載何時是 JPG,何時是 PNG

萃取程式碼路徑支援兩種 PDF 儲存情況。第一種是 DCTDecode,也就是 PDF 規格中表示內嵌 JPEG 串流的方式。儲存的 JPEG 位元組會原封不動地直接下載。重新算繪只會多增加一層品質損失,工具刻意避免這個步驟。

第二個支援的情況是簡單的 FlateDecode 影像,使用 8 位元 DeviceRGB 或 DeviceGray 色彩,沒有 DecodeParms、沒有遮罩、也沒有鏈式濾鏡。原始像素資料會解開到本地像素緩衝區,放到 canvas 上,然後匯出為 PNG。在這裡使用 PNG 是因為原始的 Flate 串流本身不是任何一般應用程式能開啟的完整檔案;它只是沒有容器的壓縮像素資料。

下表摘要說明每種情況可以預期的結果,以及當素材落在支援範圍之外時會發生什麼事。

PDF 中的儲存情況工具執行的動作輸出檔案是否保留原始位元組
DCTDecode(內嵌 JPEG)找到串流並將位元組原樣匯出.jpg是,逐位元組保留
FlateDecode,8 位元 DeviceRGB 或 DeviceGray,無 DecodeParms,無遮罩解開像素,在本地 canvas 上繪製,編碼為 PNG.png保留像素資料;容器重寫
JPX、JBIG2、LZW、索引色盤、CMYK、影像遮罩、軟遮罩、預測器、鏈式濾鏡略過並回報無不適用

重複的間接影像引用只會檢查一次,因此一個在多個頁面重複使用的儲存素材只會產生單一下載,而不是一組令人困惑的重複檔案。這能讓輸出清單聚焦在實際的素材上,而不是算繪結果。

如何在本地將 PDF 影像萃取為 JPG

實際步驟與工具回報的內容一致,並且整個過程中文件都保留在你的電腦上。在你想讓下載檔案落入的瀏覽器分頁中開啟 Extract Images from PDF 工具,然後依照以下步驟操作。

  1. 挑選一個不超過 25 MB 的本地 PDF。較大的檔案會在任何掃描開始前就被拒絕。每次作業只挑選一個檔案;這個工作流程不支援多檔案批次處理。
  2. 點選「Extract images」。瀏覽器會開始掃描 PDF 中有界限的內嵌影像物件。文件標頭會經過驗證,影像 XObject 也會被列舉出來。這個步驟期間不會有任何資料離開你的裝置。
  3. 檢視清單。每個支援的影像會顯示其偵測到的格式(JPG 或 PNG)以及像素尺寸。略過項目表示工具刻意不解碼的物件,並會說明原因。
  4. 下載每個支援的影像。每一列都有其專屬的下載連結。將 JPG 儲存到你能對照來源頁面進行驗證的位置。當選擇其他檔案或離開工具時,暫存的下載 URL 會被釋放。

下載完成後,請用一般的影像檢視器開啟它,並與原始 PDF 頁面的對應區域進行比對。尺寸、色彩深度與長寬比應符合你在來源中看到的內容。如果不符,可能是工具略過了該素材,或原始影像是以瀏覽器工具不會嘗試處理的編碼方式儲存。

建立下載前套用的安全限制

在工具配置大型輸出緩衝區之前,會先檢查多項預算,因為沒有限制的 Flate 串流或過大的影像可能會讓瀏覽器分頁卡住。以下列出取自產品合約的已驗證限制。

  • PDF 大小:輸入檔案最大 25 MB。
  • 影像尺寸:每張影像最長邊最多 12,000 像素。
  • 每張影像像素數:40 百萬像素。
  • 總像素數:單一作業中所有萃取影像合計 100 百萬像素。
  • 解碼 Flate 預算:所有 FlateDecode 影像的解開像素資料合計 100 MB。
  • 候選項目數:列舉期間的候選清單有上限,也會在建立輸出緩衝區前強制執行。

即使有這些預算,受密碼保護、格式損壞或異常複雜的 PDF 仍可能處理失敗。該工具不會繞過加密、不會修復損壞的檔案,也不會驗證簽章。它也不會對來源文件是否可信做出任何聲明。這個判斷屬於使用者,而非工具。

為何有些影像被略過而非解碼

PDF 影像儲存有許多合法的變化形式,萃取路徑並不會假設這些變化都能與簡單的 DCTDecode 或 FlateDecode RGB 串流互換。有些影像使用 JPX 或 JBIG2 以達到高壓縮率。其他則使用 LZW 或索引色盤來減少頻寬。CMYK 影像在印刷導向的工作流程中很常見。預測器通常與 Flate 搭配使用,軟遮罩與影像遮罩則負責處理透明度與剪裁,多個濾鏡也可以依序鏈接。

將這些情況透過錯誤的程式碼路徑解碼,會在不知不覺中改變色彩、遺失透明度,或產生一個能開啟但像素值錯誤的檔案。略過是較安全的選擇。略過項目會告訴你該素材確實存在於 PDF 中,且工具選擇不從它產生檔案,而不是回傳一個看起來合理但技術上錯誤的結果。對於這些不支援的情況,誠實的替代方案是像 PDF To PNG 這樣的頁面點陣化器,它仍能擷取頁面的可見內容,代價是將素材視為頁面的一部分,而非獨立的檔案。

萃取完成後請保留原始 PDF。開啟下載的 JPG 與 PNG,確認尺寸與內容符合你對來源頁面的預期,並在通過這項檢查後再使用下載檔案。該工具對它能與不能解碼的內容是誠實的,而正因為這種誠實,它所產生的 JPG 才能被視為文件中儲存的影像承載內容,而非合成的近似結果。

如果你正在權衡各種選項,Extract Pages From Multiple PDF Files at Once 對此有詳細說明。