
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の情報はこちらです。
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)
コメント