【Python】PDFを画像ファイル(PNG/JPEG)に変換する実装例

python
スポンサーリンク
ピーター
ピーター

PythonでPDFを画像ファイルに変換したい!

今回はPythonでPDFを画像ファイル(PNG/JPEG)に変換するための手順について、備忘録として記載します。

PythonでPDFを画像ファイルに変換して、画像処理などをしたい場合、その第一歩となる部分です。

環境設定としてインストールしないといけないものも含めて紹介します!



ポイント:pdf2imageで画像変換する

PDFをPillow型Imageオブジェクトに変換するためのpdf2imageを使用します

pdf2image/popplerのインストール

pipでインストールしている場合のコマンド

pip install pdf2image
pip install poppler

pdf2imageの情報はこちらです。
https://github.com/Belval/pdf2image

popplerの情報はこちらです。

Poppler

Pythonのコード

from pathlib import Path
from pdf2image import convert_from_path

input_pdf_path = Path('in_pdf/sample.pdf')
image_dir = Path('out_image')
out_format = 'jpeg'

images = convert_from_path(pdf_path = input_pdf_path, dpi = 300, fmt = out_format)

for i, image in enumerate(images):
    out_image_path = image_dir / Path("img_{}_{}.{}".format(input_pdf_path.stem, i + 1, out_format))
    image.save(out_image_path, out_format)

PDFをImageに変換する関数(convert_from_path)パタメータは主に以下のような設定があります。

  • pdf_path:変換するPDFのファイルパス
  • output_folder:変換後に保管するフォルダパスの設定
  • dpi:変換後の解像度になります(デフォルトは200dpi)
  • fmt:変換時の画像フォーマット(jpeg/png/ppm、デフォルトはppm)
  • grayscale:グレースケール変換の設定(デフォルトはFalse)
  • timeout:タイムアウトする時間の設定(デフォルトは600)

パソコンの性能によっては、PDFのページ数が多い場合にエラーとなってしまうケースがあります。

その他の参考記事について

PDFから変換した画像にOCR(文字認識)する方法

PDFを画像に変換したら、色々画像処理でも遊んでみたくなりますが、OCRをすることもできます。環境も簡単に作れるEasyOCRの使い方を紹介しています。

PDFをOpenCVで画像処理したい場合のまとめ

こちらの記事でPDFを画像に変換し、OpenCVで処理できるようにするための記事を紹介します。

変換した画像ファイルに画像処理をしたい場合について

OpenCVで処理できるようにデータ変換する場合

PDFで変換した画像に、OpenCVの画像処理を利用したい場合、こちらの記事を参考にしてください!

PythonでOpenCVを使いたい場合

macになりますが、PythonでOpenCVを使う場合の環境構築方法について紹介しています。

オンラインサイトで勉強する場合

OpenCVとPythonのついてオンラインで勉強したい場合、こちらのサイトはおすすめです!動画で解説されているため、動画を見ながら検討環境の構築やサンプルプログラムを参考に学習することが可能です

その他のpdf2imageの使い方について

PDFにパスワードがかかっている場合の対処法

PDFデータでパスワードが掛かっている場合や解除したい場合があります。その場合は、こちらの記事を参考にしてください

画像ファイルをPDFに変換する方法について

逆に画像ファイル(PNG/JPEG/JPG)からPDFファイルに変換する方法はこちらの記事で紹介しています。

メモリエラーが発生した場合

pdf2imageでメモリエラーが発生した場合、この記事を参考にしてください!

記事の修正履歴

2021/8/8 修正

出力用パスを作成中にpathlibを入力する必要がありませんでした。

修正前のコードの一部(赤字+取り消し線)を記載します。

for i, image in enumerate(images):
    out_image_path = image_dir / pathlib.Path("img_{}_{}.{}".format(input_pdf_path.stem, i + 1, out_format))
    image.save(out_image_path, out_format)

コメント

ランキング

タイトルとURLをコピーしました