Python

【Python】psdファイルのプロパティ情報を取得したい

shamimatsu

psdの画像サイズアルファチャンネルの有無で処理を分けるのが目的です。
PILやopenCVを使えば比較的簡単に情報を取得できますが、環境によりそれらを使えなかったため既存の機能で取得できる方法を探していました。

teratailで以前質問させて頂き解決は出来ませんでしたが、ヘッダー情報を読み取れれば取得できるかもしれないという回答を頂けたので調べてみました。

チャンネル数、画像サイズ、ビット数取得

コード

python3.7を使用
psdのチャンネル数、画像サイズ、ビット数の取得ができました。

テストpsd解析の結果例
チャンネル数 3
高さ 540
幅 960
ビット数 8

# psdファイルパスに変更してください
filepath = 'D:/psd/blogimage.psd'

# psdファイルをバイナリモードで読み込み
file = open(filepath, 'rb')
data = file.read()
file.close()

ch = data[13:14]
height = data[14:18]
width = data[18:22]
bit = data[23:24]

# 16進数を整数に変換
ch = int(ch.hex(), 16)
height = int(height.hex(), 16)
width = int(width.hex(), 16)
bit = int(bit.hex(), 16)

print('チャンネル数', ch)
print('高さ', height)
print('幅', width)
print('ビット数', bit)

説明

[:]の中の値はあらゆるパターンを打ち込んだ総当たりで見つけました。
もっと良い方法はあったのかもしれません。

アルファなしだとチャンネル数が3
アルファありだとチャンネル数が4になります。

ビットの深度はプロパティに書いてあるものとは異なっており
photoshopのイメージ モードで設定しているビット数が返ってくるようです。

他の形式ファイルもヘッダが解析できれば同じ方法でプロパティを取得できると思います。

参考資料

PSDファイルのライブラリ作成 – 技ラボ
Python で 16 進文字列を Int に変換する | Delft スタック

ABOUT ME
shamimatsu
shamimatsu
3DCGデザイナー
ながらくゲーム業界で2D、3DCGデザイナーとして働いてきましたが、新しい業界に挑戦中です。 ブログのデザインをリニューアル中のため、見づらい箇所もあるかもしれませんが少しづつ修正していきます。
記事URLをコピーしました