[Python] tiffファイルを読み込む方法

PythonでTIFFファイルを読み込むには、主にPillowライブラリを使用します。

PillowはPython Imaging Library (PIL) の後継で、画像の読み込みや操作が可能です。

TIFFファイルを読み込むには、Image.open()メソッドを使用します。

例えば、from PIL import ImageでPillowをインポートし、Image.open('file.tiff')でTIFFファイルを開きます。

また、tifffileライブラリもTIFFファイルの読み込みに特化しており、大きなTIFFファイルやマルチページTIFFの処理に便利です。

この記事でわかること
  • TIFFファイルの基本的な特徴
  • Pillowとtifffileの使い方
  • TIFFファイルの操作方法
  • マルチページTIFFの処理方法
  • メタデータの操作手法

TIFFファイルを扱う際の実践的な知識を活用し、さまざまな画像処理に挑戦してみることをお勧めします

目次から探す

TIFFファイルとは

TIFF(Tagged Image File Format)は、高品質な画像を保存するためのファイル形式です。

主に印刷業界やデジタル画像処理で広く使用されており、可逆圧縮や非圧縮のオプションを提供します。

TIFFファイルは、複数の画像を1つのファイルに格納できるため、マルチページ文書や高解像度の画像を扱う際に便利です。

また、TIFFは多くの画像編集ソフトウェアやプログラミングライブラリでサポートされており、画像のメタデータを含むことができるため、画像の管理やアーカイブにも適しています。

PythonでTIFFファイルを扱うための準備

必要なライブラリのインストール方法

PythonでTIFFファイルを扱うためには、主にPillowとtifffileというライブラリを使用します。

これらのライブラリは、pipを使って簡単にインストールできます。

以下のコマンドを実行してください。

pip install Pillow tifffile

Pillowライブラリの概要

Pillowは、Python Imaging Library(PIL)のフォークであり、画像処理を行うための強力なライブラリです。

TIFFファイルを含む多くの画像フォーマットをサポートしており、画像の読み込み、表示、変換、編集などの機能を提供します。

Pillowは、シンプルなAPIを持ち、初心者でも扱いやすいのが特徴です。

tifffileライブラリの概要

tifffileは、TIFFファイル専用のライブラリで、特にマルチページTIFFやTIFFのメタデータを扱うのに優れています。

このライブラリは、TIFFファイルの読み込み、書き込み、メタデータの取得などを効率的に行うことができます。

特に科学技術分野での画像処理において、tifffileは非常に有用です。

他の関連ライブラリ

TIFFファイルを扱う際に役立つ他の関連ライブラリには、以下のようなものがあります。

スクロールできます
ライブラリ名概要
OpenCV画像処理やコンピュータビジョンに特化したライブラリ。TIFFファイルも扱える。
scikit-image科学技術計算向けの画像処理ライブラリ。TIFFファイルの読み込みが可能。
imageio画像の入出力を簡単に行うためのライブラリ。TIFFファイルもサポート。

Pillowを使ったTIFFファイルの読み込み

Pillowのインポート方法

Pillowを使用するためには、まずライブラリをインポートする必要があります。

以下のように、PILモジュールからImageクラスをインポートします。

from PIL import Image

Image.open()を使ったTIFFファイルの読み込み

TIFFファイルを読み込むには、Image.open()メソッドを使用します。

このメソッドは、指定したファイルパスのTIFFファイルを開き、Imageオブジェクトを返します。

from PIL import Image
# TIFFファイルのパス
file_path = 'example.tiff'
# TIFFファイルを読み込む
image = Image.open(file_path)

読み込んだTIFFファイルの表示方法

読み込んだTIFFファイルを表示するには、show()メソッドを使用します。

このメソッドを呼び出すと、デフォルトの画像ビューアで画像が表示されます。

# TIFFファイルを表示する
image.show()

TIFFファイルのメタデータの取得方法

TIFFファイルには、画像に関するメタデータが含まれています。

Pillowを使用してメタデータを取得するには、info属性を利用します。

# TIFFファイルのメタデータを取得する
metadata = image.info
# メタデータを表示する
print(metadata)

TIFFファイルの保存方法

TIFFファイルを保存するには、save()メソッドを使用します。

保存する際に、ファイル名と必要に応じてフォーマットを指定します。

# TIFFファイルを保存する
output_path = 'output.tiff'
image.save(output_path, format='TIFF')

このコードを実行すると、指定したパスにTIFFファイルが保存されます。

tifffileを使ったTIFFファイルの読み込み

tifffileのインポート方法

tifffileライブラリを使用するためには、まずライブラリをインポートします。

以下のように、tifffileモジュールをインポートします。

import tifffile as tiff

tifffile.imread()を使ったTIFFファイルの読み込み

TIFFファイルを読み込むには、tifffile.imread()メソッドを使用します。

このメソッドは、指定したファイルパスのTIFFファイルを開き、NumPy配列として画像データを返します。

import tifffile as tiff
# TIFFファイルのパス
file_path = 'example.tiff'
# TIFFファイルを読み込む
image_data = tiff.imread(file_path)

マルチページTIFFの読み込み方法

マルチページTIFFファイルを読み込む場合、tifffile.imread()を使用すると、すべてのページをNumPy配列として取得できます。

各ページは、配列の異なるスライスとしてアクセスできます。

# マルチページTIFFファイルを読み込む
multi_page_image = tiff.imread('multi_page_example.tiff')
# 1ページ目の画像データを取得
first_page = multi_page_image[0]

TIFFファイルのメタデータの取得方法

tifffileを使用してTIFFファイルのメタデータを取得するには、tifffile.TiffFileクラスを使用します。

このクラスを使ってTIFFファイルを開き、メタデータにアクセスできます。

# TIFFファイルのメタデータを取得する
with tiff.TiffFile(file_path) as tif:
    metadata = tif.pages[0].tags
    for tag in metadata:
        print(tag, metadata[tag].value)

TIFFファイルの保存方法

tifffileを使用してTIFFファイルを保存するには、tifffile.imsave()メソッドを使用します。

このメソッドに画像データと保存先のファイル名を指定します。

# TIFFファイルを保存する
output_path = 'output.tiff'
tiff.imsave(output_path, image_data)

このコードを実行すると、指定したパスにTIFFファイルが保存されます。

TIFFファイルの操作と変換

TIFFファイルを他の形式に変換する方法

TIFFファイルを他の画像形式に変換するには、Pillowライブラリのsave()メソッドを使用します。

例えば、TIFFファイルをJPEG形式に変換する場合、以下のように記述します。

from PIL import Image
# TIFFファイルを読み込む
image = Image.open('example.tiff')
# JPEG形式で保存する
image.save('output.jpg', format='JPEG')

このコードを実行すると、指定したTIFFファイルがJPEG形式で保存されます。

TIFFファイルのリサイズや回転

TIFFファイルのリサイズや回転は、Pillowライブラリを使用して簡単に行えます。

resize()メソッドでリサイズ、rotate()メソッドで回転を行います。

from PIL import Image
# TIFFファイルを読み込む
image = Image.open('example.tiff')
# リサイズ(幅300px、高さ200pxに変更)
resized_image = image.resize((300, 200))
# 90度回転
rotated_image = image.rotate(90)
# 保存
resized_image.save('resized_output.tiff')
rotated_image.save('rotated_output.tiff')

TIFFファイルの圧縮と解凍

TIFFファイルの圧縮は、Pillowのsave()メソッドを使用して行います。

圧縮形式を指定することで、ファイルサイズを小さくすることができます。

以下は、LZW圧縮を使用してTIFFファイルを保存する例です。

from PIL import Image
# TIFFファイルを読み込む
image = Image.open('example.tiff')
# LZW圧縮で保存
image.save('compressed_output.tiff', compression='tiff_lzw')

解凍は、TIFFファイルを読み込む際に自動的に行われます。

TIFFファイルの一部を切り取る方法

TIFFファイルの一部を切り取るには、crop()メソッドを使用します。

このメソッドには、切り取りたい領域の座標を指定します。

from PIL import Image
# TIFFファイルを読み込む
image = Image.open('example.tiff')
# 切り取りたい領域の座標(左、上、右、下)
crop_area = (100, 100, 400, 400)
# 切り取る
cropped_image = image.crop(crop_area)
# 保存
cropped_image.save('cropped_output.tiff')

このコードを実行すると、指定した領域が切り取られた新しいTIFFファイルが保存されます。

応用例:TIFFファイルのバッチ処理

複数のTIFFファイルを一括で読み込む方法

複数のTIFFファイルを一括で読み込むには、globモジュールを使用してファイルパスを取得し、ループで各ファイルを読み込みます。

以下は、指定したディレクトリ内のすべてのTIFFファイルを読み込む例です。

import glob
from PIL import Image
# TIFFファイルが格納されているディレクトリのパス
directory_path = 'path/to/tiff/files/*.tiff'
# TIFFファイルを一括で読み込む
for file_path in glob.glob(directory_path):
    image = Image.open(file_path)
    print(f'Loaded: {file_path}')

TIFFファイルの一括変換

複数のTIFFファイルを一括で他の形式に変換するには、上記の方法を応用します。

以下は、すべてのTIFFファイルをJPEG形式に変換する例です。

import glob
from PIL import Image
# TIFFファイルが格納されているディレクトリのパス
directory_path = 'path/to/tiff/files/*.tiff'
# TIFFファイルを一括でJPEG形式に変換
for file_path in glob.glob(directory_path):
    image = Image.open(file_path)
    output_path = file_path.replace('.tiff', '.jpg')
    image.save(output_path, format='JPEG')
    print(f'Converted: {file_path} to {output_path}')

TIFFファイルの一括リサイズ

複数のTIFFファイルを一括でリサイズするには、resize()メソッドを使用します。

以下は、すべてのTIFFファイルを指定したサイズにリサイズする例です。

import glob
from PIL import Image
# TIFFファイルが格納されているディレクトリのパス
directory_path = 'path/to/tiff/files/*.tiff'
# リサイズするサイズ
new_size = (300, 200)
# TIFFファイルを一括でリサイズ
for file_path in glob.glob(directory_path):
    image = Image.open(file_path)
    resized_image = image.resize(new_size)
    output_path = file_path.replace('.tiff', '_resized.tiff')
    resized_image.save(output_path)
    print(f'Resized: {file_path} to {output_path}')

TIFFファイルの一括圧縮

複数のTIFFファイルを一括で圧縮するには、save()メソッドで圧縮オプションを指定します。

以下は、すべてのTIFFファイルをLZW圧縮で保存する例です。

import glob
from PIL import Image
# TIFFファイルが格納されているディレクトリのパス
directory_path = 'path/to/tiff/files/*.tiff'
# TIFFファイルを一括で圧縮
for file_path in glob.glob(directory_path):
    image = Image.open(file_path)
    output_path = file_path.replace('.tiff', '_compressed.tiff')
    image.save(output_path, compression='tiff_lzw')
    print(f'Compressed: {file_path} to {output_path}')

このコードを実行すると、指定したディレクトリ内のすべてのTIFFファイルがLZW圧縮された新しいTIFFファイルとして保存されます。

応用例:TIFFファイルのマルチページ処理

マルチページTIFFの概要

マルチページTIFFは、1つのTIFFファイルに複数の画像(ページ)を格納できる形式です。

この形式は、スキャンした文書やアニメーション画像など、複数の関連する画像を1つのファイルにまとめるのに便利です。

マルチページTIFFは、各ページに異なる解像度や色空間を持たせることも可能で、柔軟な画像管理ができます。

マルチページTIFFのページ数を取得する方法

tifffileライブラリを使用して、マルチページTIFFファイルのページ数を取得するには、TiffFileクラスを利用します。

以下のコードは、指定したTIFFファイルのページ数を取得する例です。

import tifffile as tiff
# マルチページTIFFファイルのパス
file_path = 'multi_page_example.tiff'
# TIFFファイルを開く
with tiff.TiffFile(file_path) as tif:
    page_count = len(tif.pages)
    print(f'ページ数: {page_count}')

マルチページTIFFの特定ページを読み込む方法

特定のページを読み込むには、TiffFileクラスを使用してページインデックスを指定します。

以下は、1ページ目を読み込む例です。

import tifffile as tiff
# マルチページTIFFファイルのパス
file_path = 'multi_page_example.tiff'
# TIFFファイルを開く
with tiff.TiffFile(file_path) as tif:
    first_page = tif.pages[0].asarray()  # 1ページ目をNumPy配列として取得
    print(f'1ページ目のデータ: {first_page.shape}')

マルチページTIFFのページを追加・削除する方法

マルチページTIFFファイルにページを追加したり削除したりするには、tifffileライブラリを使用して新しいTIFFファイルを作成する必要があります。

以下は、ページを追加する例です。

import tifffile as tiff
import numpy as np
# 新しいTIFFファイルを作成するためのデータ
new_page = np.zeros((100, 100), dtype=np.uint8)  # 100x100の黒い画像
# 既存のマルチページTIFFファイルのパス
input_file_path = 'multi_page_example.tiff'
output_file_path = 'updated_multi_page.tiff'
# TIFFファイルを開いてページを追加
with tiff.TiffFile(input_file_path) as tif:
    with tiff.TiffWriter(output_file_path) as writer:
        for page in tif.pages:
            writer.save(page.asarray())  # 既存のページを保存
        writer.save(new_page)  # 新しいページを追加
print(f'新しいページを追加したTIFFファイルを保存しました: {output_file_path}')

ページを削除する場合は、同様に新しいTIFFファイルを作成し、削除したいページを除外して保存します。

これにより、必要なページだけを含む新しいマルチページTIFFファイルを作成できます。

応用例:TIFFファイルのメタデータ操作

TIFFファイルのメタデータとは

TIFFファイルのメタデータは、画像に関する追加情報を含むデータです。

これには、画像の作成日時、カメラの設定、解像度、色空間、著作権情報などが含まれます。

メタデータは、画像の管理や検索、アーカイブに役立ちます。

TIFF形式は、メタデータを柔軟に扱えるため、特に科学技術分野や印刷業界で広く使用されています。

メタデータの読み込み方法

tifffileライブラリを使用してTIFFファイルのメタデータを読み込むには、TiffFileクラスを利用します。

以下のコードは、TIFFファイルのメタデータを取得して表示する例です。

import tifffile as tiff
# TIFFファイルのパス
file_path = 'example.tiff'
# TIFFファイルを開く
with tiff.TiffFile(file_path) as tif:
    metadata = tif.pages[0].tags
    for tag in metadata:
        print(f'{tag}: {metadata[tag].value}')

メタデータの編集方法

TIFFファイルのメタデータを編集するには、まず新しいTIFFファイルを作成し、既存のメタデータを変更して保存します。

以下は、特定のメタデータを編集する例です。

import tifffile as tiff
import numpy as np
# 既存のTIFFファイルのパス
input_file_path = 'example.tiff'
output_file_path = 'edited_example.tiff'
# TIFFファイルを開く
with tiff.TiffFile(input_file_path) as tif:
    with tiff.TiffWriter(output_file_path) as writer:
        for page in tif.pages:
            # メタデータを編集(例:著作権情報を変更)
            page.tags['Copyright'].value = '新しい著作権情報'
            writer.save(page.asarray(), metadata=page.tags)
print(f'メタデータを編集したTIFFファイルを保存しました: {output_file_path}')

メタデータの削除方法

TIFFファイルのメタデータを削除するには、同様に新しいTIFFファイルを作成し、削除したいメタデータを除外して保存します。

以下は、特定のメタデータを削除する例です。

import tifffile as tiff
import numpy as np
# 既存のTIFFファイルのパス
input_file_path = 'example.tiff'
output_file_path = 'deleted_metadata_example.tiff'
# TIFFファイルを開く
with tiff.TiffFile(input_file_path) as tif:
    with tiff.TiffWriter(output_file_path) as writer:
        for page in tif.pages:
            # メタデータを削除(例:著作権情報を削除)
            if 'Copyright' in page.tags:
                del page.tags['Copyright']
            writer.save(page.asarray(), metadata=page.tags)
print(f'メタデータを削除したTIFFファイルを保存しました: {output_file_path}')

このコードを実行すると、指定したメタデータが削除された新しいTIFFファイルが保存されます。

メタデータの操作は、画像の管理やアーカイブにおいて非常に重要な作業です。

よくある質問

TIFFファイルを読み込む際にエラーが出るのはなぜ?

TIFFファイルを読み込む際にエラーが発生する主な原因は以下の通りです。

  • ファイルの破損: TIFFファイルが破損している場合、正しく読み込むことができません。
  • ライブラリの不具合: 使用しているライブラリが古い場合や、互換性のないバージョンを使用しているとエラーが発生することがあります。
  • ファイル形式の不一致: TIFFファイルが特定の圧縮形式やオプションを使用している場合、対応していないライブラリでは読み込めないことがあります。

TIFFファイルの読み込み速度を改善する方法は?

TIFFファイルの読み込み速度を改善するための方法は以下の通りです。

  • 必要なページのみを読み込む: マルチページTIFFの場合、全ページを読み込むのではなく、必要なページだけを指定して読み込むことで速度を向上させることができます。
  • 適切なライブラリを選択する: tifffilePillowなど、用途に応じた最適なライブラリを選ぶことで、読み込み速度が改善されることがあります。
  • 画像の解像度を下げる: 高解像度のTIFFファイルは読み込みに時間がかかるため、必要に応じて解像度を下げることを検討してください。

マルチページTIFFを扱う際の注意点は?

マルチページTIFFを扱う際の注意点は以下の通りです。

  • ページ数の確認: マルチページTIFFのページ数を事前に確認し、必要なページを正しく指定することが重要です。
  • メモリ管理: 大きなマルチページTIFFファイルを扱う場合、メモリ使用量が増加するため、適切なメモリ管理を行うことが必要です。
  • ページの順序: ページの順序が重要な場合、正しい順序で処理するように注意してください。

ページの順序を誤ると、意図しない結果を招くことがあります。

まとめ

この記事では、Pythonを使用してTIFFファイルを扱う方法について詳しく解説しました。

具体的には、TIFFファイルの読み込み、操作、変換、マルチページ処理、メタデータの操作に関する実用的な例を紹介しました。

これらの知識を活用して、TIFFファイルを効率的に処理し、さまざまな用途に応じた画像管理を行うことが可能です。

ぜひ、実際のプロジェクトでこれらの技術を試してみてください。

  • URLをコピーしました!
目次から探す