【PySide2】テキストフィールドの入力を受け取る
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 スタック