画像

[Python] jpgとpdfを相互に変換する方法

PythonでJPGとPDFを相互に変換するには、PillowとPyPDF2などのライブラリを使用します。

JPGからPDFへの変換は、PillowのImageモジュールを使い、画像を開いてsave()メソッドでPDF形式に保存します。

PDFからJPGへの変換は、PyMuPDFfitzやpdf2imageを使ってPDFページを画像として抽出します。

これにより、PDFの各ページをJPG形式で保存できます。

JPGとPDFの相互変換に必要なライブラリ

JPGとPDFの相互変換を行うためには、いくつかのPythonライブラリが必要です。

以下に、主要なライブラリとそのインストール方法を示します。

ライブラリ名機能説明インストールコマンド
Pillow画像処理ライブラリ。JPGをPDFに変換する際に使用。pip install Pillow
PyPDF2PDFファイルの操作を行うライブラリ。PDFからJPGに変換する際に使用。pip install PyPDF2
pdf2imagePDFを画像に変換するためのライブラリ。PDFからJPGに変換する際に使用。pip install pdf2image
PyMuPDF (fitz)PDFファイルを操作するためのライブラリ。PDFからJPGに変換する際に使用。pip install PyMuPDF

これらのライブラリをインストールすることで、JPGとPDFの相互変換が可能になります。

各ライブラリは特定の機能を持っており、用途に応じて使い分けることが重要です。

JPGからPDFへの変換方法

Pillowを使ったJPGからPDFへの変換

Pillowライブラリを使用して、単一のJPG画像をPDFに変換する方法を紹介します。

以下のサンプルコードを参考にしてください。

from PIL import Image
# JPG画像を開く
image = Image.open("example.jpg")
# PDFに変換して保存
image.save("output.pdf", "PDF")

このコードを実行すると、example.jpgというJPGファイルがoutput.pdfというPDFファイルに変換されます。

複数のJPGを1つのPDFにまとめる方法

複数のJPG画像を1つのPDFファイルにまとめることも可能です。

以下のサンプルコードを参照してください。

from PIL import Image
# 複数のJPG画像をリストに格納
images = ["image1.jpg", "image2.jpg", "image3.jpg"]
# 画像を開いてPDFに変換
image_list = [Image.open(img) for img in images]
image_list[0].save("output.pdf", save_all=True, append_images=image_list[1:])

このコードでは、image1.jpgimage2.jpgimage3.jpgの3つのJPG画像が1つのPDFファイルoutput.pdfにまとめられます。

画像の解像度や品質を調整する方法

画像の解像度や品質を調整してPDFに変換することもできます。

以下のサンプルコードでは、解像度を指定してPDFに保存します。

from PIL import Image
# JPG画像を開く
image = Image.open("example.jpg")
# 解像度を設定
image = image.resize((800, 600), Image.ANTIALIAS)
# PDFに変換して保存
image.save("output.pdf", "PDF", quality=95)

このコードでは、画像のサイズを800×600ピクセルにリサイズし、品質を95に設定してPDFに変換します。

変換時のエラーハンドリング

変換処理中にエラーが発生する可能性があるため、エラーハンドリングを行うことが重要です。

以下のサンプルコードでは、エラーをキャッチして適切に処理します。

from PIL import Image
try:
    # JPG画像を開く
    image = Image.open("example.jpg")
    # PDFに変換して保存
    image.save("output.pdf", "PDF")
except FileNotFoundError:
    print("指定したファイルが見つかりません。")
except Exception as e:
    print(f"エラーが発生しました: {e}")

このコードでは、指定したJPGファイルが存在しない場合やその他のエラーが発生した場合に、適切なメッセージを表示します。

PDFからJPGへの変換方法

pdf2imageを使ったPDFからJPGへの変換

pdf2imageライブラリを使用して、PDFファイルをJPG画像に変換する方法を紹介します。

以下のサンプルコードを参考にしてください。

from pdf2image import convert_from_path
# PDFファイルを指定してJPGに変換
images = convert_from_path("example.pdf")
# 各ページをJPGとして保存
for i, image in enumerate(images):
    image.save(f"page_{i + 1}.jpg", "JPEG")

このコードを実行すると、example.pdfの各ページがpage_1.jpgpage_2.jpgのようにJPGファイルとして保存されます。

PyMuPDF(fitz)を使ったPDFからJPGへの変換

PyMuPDF(fitz)ライブラリを使用してPDFをJPGに変換する方法もあります。

以下のサンプルコードを参照してください。

import fitz  # PyMuPDF
# PDFファイルを開く
pdf_document = fitz.open("example.pdf")
# 各ページをJPGとして保存
for i in range(len(pdf_document)):
    page = pdf_document[i]
    pix = page.get_pixmap()
    pix.save(f"page_{i + 1}.jpg")

このコードでは、example.pdfの各ページがJPGファイルとして保存されます。

複数ページのPDFをJPGに分割する方法

複数ページのPDFをJPGに分割する方法は、上記のコードで示した通りです。

各ページを個別のJPGファイルとして保存することができます。

変換時の解像度や品質の調整

変換時に解像度や品質を調整することも可能です。

以下のサンプルコードでは、pdf2imageを使用して解像度を指定してJPGに変換します。

from pdf2image import convert_from_path
# PDFファイルを指定してJPGに変換(解像度を300dpiに設定)
images = convert_from_path("example.pdf", dpi=300)
# 各ページをJPGとして保存
for i, image in enumerate(images):
    image.save(f"page_{i + 1}.jpg", "JPEG", quality=95)

このコードでは、解像度を300dpiに設定し、品質を95にしてJPGファイルを保存します。

変換時のエラーハンドリング

変換処理中にエラーが発生する可能性があるため、エラーハンドリングを行うことが重要です。

以下のサンプルコードでは、エラーをキャッチして適切に処理します。

from pdf2image import convert_from_path
try:
    # PDFファイルを指定してJPGに変換
    images = convert_from_path("example.pdf")
    for i, image in enumerate(images):
        image.save(f"page_{i + 1}.jpg", "JPEG")
except FileNotFoundError:
    print("指定したPDFファイルが見つかりません。")
except Exception as e:
    print(f"エラーが発生しました: {e}")

このコードでは、指定したPDFファイルが存在しない場合やその他のエラーが発生した場合に、適切なメッセージを表示します。

応用例:特定のページのみを変換する方法

PDFの特定ページをJPGに変換する方法

特定のページを指定してPDFからJPGに変換する方法を紹介します。

以下のサンプルコードでは、PDFの1ページ目をJPGに変換します。

from pdf2image import convert_from_path
# PDFファイルを指定して特定のページをJPGに変換
page_number = 1  # 1ページ目を指定
images = convert_from_path("example.pdf", first_page=page_number, last_page=page_number)
# JPGとして保存
for i, image in enumerate(images):
    image.save(f"page_{page_number}.jpg", "JPEG")

このコードを実行すると、example.pdfの1ページ目がpage_1.jpgとして保存されます。

複数ページのPDFから特定のページを抽出して変換する方法

複数ページのPDFから特定のページを抽出して変換する方法も可能です。

以下のサンプルコードでは、PDFの2ページ目と4ページ目をJPGに変換します。

from pdf2image import convert_from_path
# PDFファイルを指定して特定のページをJPGに変換
pages_to_convert = [2, 4]  # 変換したいページ番号
images = convert_from_path("example.pdf", first_page=min(pages_to_convert), last_page=max(pages_to_convert))
# 指定したページをJPGとして保存
for i, image in enumerate(images):
    if (i + 1) in pages_to_convert:
        image.save(f"page_{i + 1}.jpg", "JPEG")

このコードでは、example.pdfの2ページ目と4ページ目がそれぞれpage_2.jpgpage_4.jpgとして保存されます。

JPGからPDFに変換する際に特定の順序でページを並べる方法

JPGからPDFに変換する際に、特定の順序でページを並べることもできます。

以下のサンプルコードでは、指定した順序でJPG画像をPDFにまとめます。

from PIL import Image
# JPG画像を指定した順序でリストに格納
images = ["image3.jpg", "image1.jpg", "image2.jpg"]  # 特定の順序
# 画像を開いてPDFに変換
image_list = [Image.open(img) for img in images]
image_list[0].save("output.pdf", save_all=True, append_images=image_list[1:])

このコードでは、image3.jpgimage1.jpgimage2.jpgの順序でPDFファイルoutput.pdfが作成されます。

指定した順序で画像を並べることで、目的に応じたPDFを作成することができます。

応用例:バッチ処理で複数ファイルを一括変換

複数のJPGファイルを一括でPDFに変換する方法

複数のJPGファイルを一括でPDFに変換する方法を紹介します。

以下のサンプルコードでは、指定したフォルダ内の全てのJPGファイルを1つのPDFにまとめます。

import os
from PIL import Image
# JPGファイルが格納されているディレクトリ
directory = "path/to/jpg/files"
images = []
# ディレクトリ内の全てのJPGファイルをリストに追加
for filename in os.listdir(directory):
    if filename.endswith(".jpg"):
        img_path = os.path.join(directory, filename)
        images.append(Image.open(img_path))
# PDFに変換して保存
if images:
    images[0].save("output.pdf", save_all=True, append_images=images[1:])

このコードを実行すると、指定したディレクトリ内の全てのJPGファイルがoutput.pdfとして保存されます。

複数のPDFファイルを一括でJPGに変換する方法

複数のPDFファイルを一括でJPGに変換する方法もあります。

以下のサンプルコードでは、指定したフォルダ内の全てのPDFファイルをJPGに変換します。

import os
from pdf2image import convert_from_path
# PDFファイルが格納されているディレクトリ
directory = "path/to/pdf/files"
# ディレクトリ内の全てのPDFファイルを処理
for filename in os.listdir(directory):
    if filename.endswith(".pdf"):
        pdf_path = os.path.join(directory, filename)
        images = convert_from_path(pdf_path)
        # 各ページをJPGとして保存
        for i, image in enumerate(images):
            image.save(f"{filename[:-4]}_page_{i + 1}.jpg", "JPEG")

このコードを実行すると、指定したディレクトリ内の全てのPDFファイルの各ページが、filename_page_1.jpgfilename_page_2.jpgのように保存されます。

バッチ処理の効率化とエラーハンドリング

バッチ処理を行う際には、エラーハンドリングを行うことで、処理の安定性を向上させることが重要です。

以下のサンプルコードでは、エラーをキャッチして適切に処理します。

import os
from PIL import Image
from pdf2image import convert_from_path
# JPGファイルをPDFに変換する関数
def convert_jpg_to_pdf(directory):
    images = []
    for filename in os.listdir(directory):
        if filename.endswith(".jpg"):
            try:
                img_path = os.path.join(directory, filename)
                images.append(Image.open(img_path))
            except Exception as e:
                print(f"{filename}の読み込み中にエラーが発生しました: {e}")
    if images:
        try:
            images[0].save("output.pdf", save_all=True, append_images=images[1:])
        except Exception as e:
            print(f"PDFの保存中にエラーが発生しました: {e}")
# PDFファイルをJPGに変換する関数
def convert_pdf_to_jpg(directory):
    for filename in os.listdir(directory):
        if filename.endswith(".pdf"):
            try:
                pdf_path = os.path.join(directory, filename)
                images = convert_from_path(pdf_path)
                for i, image in enumerate(images):
                    image.save(f"{filename[:-4]}_page_{i + 1}.jpg", "JPEG")
            except Exception as e:
                print(f"{filename}の変換中にエラーが発生しました: {e}")
# 使用例
convert_jpg_to_pdf("path/to/jpg/files")
convert_pdf_to_jpg("path/to/pdf/files")

このコードでは、JPGからPDF、PDFからJPGへの変換処理中にエラーが発生した場合に、エラーメッセージを表示します。

これにより、どのファイルで問題が発生したのかを把握しやすくなります。

応用例:画像の圧縮と最適化

JPGからPDFに変換する際の圧縮方法

JPGからPDFに変換する際に、画像の圧縮を行うことでファイルサイズを削減できます。

以下のサンプルコードでは、JPG画像をPDFに変換する際に圧縮率を指定します。

from PIL import Image
# JPG画像を開く
image = Image.open("example.jpg")
# PDFに変換して保存(圧縮率を指定)
image.save("output.pdf", "PDF", quality=85)  # qualityは1から100の範囲で指定

このコードでは、qualityパラメータを85に設定してPDFに変換します。

値が低いほど圧縮率が高くなり、ファイルサイズが小さくなりますが、画質が劣化する可能性があります。

PDFからJPGに変換する際の圧縮方法

PDFからJPGに変換する際にも、圧縮を行うことができます。

以下のサンプルコードでは、pdf2imageライブラリを使用して解像度を指定し、JPG画像を圧縮します。

from pdf2image import convert_from_path
# PDFファイルを指定してJPGに変換(解像度を設定)
images = convert_from_path("example.pdf", dpi=150)  # dpiを低く設定することで圧縮
# 各ページをJPGとして保存(圧縮率を指定)
for i, image in enumerate(images):
    image.save(f"page_{i + 1}.jpg", "JPEG", quality=80)  # qualityは1から100の範囲で指定

このコードでは、PDFの解像度を150dpiに設定し、JPGの品質を80に指定して保存します。

これにより、ファイルサイズを削減しつつ、画質をある程度保つことができます。

画像の最適化とファイルサイズの削減

画像の最適化を行うことで、ファイルサイズをさらに削減することができます。

以下のサンプルコードでは、Pillowライブラリを使用して画像を最適化します。

from PIL import Image
# JPG画像を開く
image = Image.open("example.jpg")
# 画像を最適化して保存
image.save("optimized_output.jpg", "JPEG", optimize=True, quality=85)

このコードでは、optimize=Trueを指定することで、画像の最適化を行い、ファイルサイズを削減します。

qualityパラメータを調整することで、画質とファイルサイズのバランスを取ることができます。

これらの方法を組み合わせることで、JPGとPDFの相互変換時に画像の圧縮と最適化を行い、効率的にファイルサイズを削減することが可能です。

まとめ

この記事では、JPGとPDFの相互変換に関するさまざまな方法や応用例について詳しく解説しました。

特に、画像の圧縮や最適化、バッチ処理の効率化など、実用的なテクニックを紹介することで、より効果的にファイルを扱う方法を提案しました。

これを機に、実際にPythonを使って画像やPDFの変換を試みて、日常の業務やプロジェクトに役立ててみてはいかがでしょうか。

関連記事

Back to top button
目次へ