PDFを1ページずつ画像データに変換する

PDFを1ページずつ画像データに変換します.

# ライブラリのインストール

下記のコードでライブラリをインストールします.

!pip install PyMuPDF

# PDFを1ページずつ画像データに変換

# データの読み込み

import os
import cv2
import fitz
import csv
import json
from PIL import Image
from tqdm import tqdm

# データの読み込み
pdf_path = "./20211206_DS_jisyu.pdf"
doc = fitz.open(pdf_path)

# 保存作ディレクトリの作成
dir_name = os.path.basename(pdf_path).split('.')[0]
dir_name = f"./image/{dir_name}"
os.makedirs(dir_name, exist_ok=True)

# PDFの変換

width = 600
zoom_x = 0.8  # horizontal zoom
zoom_y = 0.8  # vertical zoom
mat = fitz.Matrix(zoom_x, zoom_y)  # zoom factor 2 in each dimension
# mat = fitz.Matrix(600 / 72, 600 / 72)  # sets zoom factor for 300 dpi
for i, page in enumerate(doc):
    pix = page.get_pixmap(matrix=mat)
    img_filename = os.path.join(dir_name, f"page_{i:03}.png")
    pix.pil_save(img_filename, format="PNG", dpi=(300,300))
    
    # 画像を読み込む。
    img = cv2.imread(img_filename)
    h, w = img.shape[:2]
    height = round(h * (width / w))
    # 指定した倍率でリサイズする。
    dst = cv2.resize(img, dsize=(width, height))
    cv2.imwrite(img_filename, dst)
    # for j, img in enumerate(page.getImageList()):
    #     x = doc.extractImage(img[0])
    #     name = os.path.join(dir_name, f"page_{j:02}.png")
    #     with open(name, "wb") as ofh:
    #         ofh.write(x['image'])

# markdownのリンク作成

import glob

paths = glob.glob(os.path.join(dir_name, '*.png'))

for path in paths:
    print(f"![]({path}) \n")

# まとめ

PDFを1ページずつ画像データに変換しました.

# 参考サイト

PyMUPDF - How to convert PDF to image, using the original document settings for the image size and set to 300dpi? (opens new window)

論文(PDF)から画像を抽出する (opens new window)

Python + seleniumでポケモンの画像をウェブスクレイピングする

Python + seleniumでポケモンの画像をウェブスクレイピングする

Python + seleniumでポケモンの画像をウェブスクレイピングで収集します.

Pandasにおける条件付きで要素を上書きする

Pandasにおける条件付きで要素を上書きする

Pandasにおける条件付きで要素を上書きします.