はじめに
広告バナー作成において、社内アプリに登録する際にレイヤーの分割作業が発生しています。
この作業が地味に時間がかかるとクリエイターさんから意見を頂いていました。
この作業をpytoshop
というpythonライブラリを使用してPSDの新規作成ができるか試してみました。
やりたいこと
例として、以下のようなロゴ、背景色と連番構成の画像レイヤーを ロゴ
-連番
-背景色
の構成でPSDを新規作成したい
├── ロゴ
├── 1
├── 2
├── 3
├── 4
└── 背景色
├── ロゴ
├── 1
└── 背景色
PSDファイルを操作するライブラリで有名どころは psd-tools
がありますが、pytoshop
はPSDの新規作成が行えるため、
既存のPSDファイルからレイヤーを取得して新規ファイルとして再構成する方法で試してみました。
ライブラリインストール
pip install pytoshop
やってみた
import os
import sys
import pytoshop
from pytoshop import layers
from pytoshop.user import nested_layers
def main():
read_file_path = 'sample_1.psd'
with open(read_file_path, 'rb') as fd:
# ヘッダ情報を読み込む
psd_header = pytoshop.core.Header.header_read(fd)
print(vars(psd_header))
fd.seek(0)
psd = pytoshop.read(fd)
current_layer_list = nested_layers.psd_to_nested_layers(psd)
new_layer = nested_layers.nested_layers_to_psd(
[current_layer_list[0], current_layer_list[1], current_layer_list[2]],
color_mode=psd_header.color_mode,
version=psd_header.version,
compression=1,
depth=8,
size=(psd_header.height, psd_header.width),
vector_mask=False
)
with open('newfile.psd', 'wb') as new_fd:
new_layer.write(new_fd)
if __name__=="__main__":
main()
結果
上記リファレンスを参照しながら作成してみました。
既存のPSDからレイヤーを取得して、新規ファイルに書き出しまでは行えましたが、
フィルターやフォントの色などが元レイヤーと違っていました。
今回レイヤー取得から新規作成までは行えたので、第1段階はクリアしたかなーと思っています。
のこライブラリの理解度が足りてないところやリファレンスに載っていないようなメソッドもありそうだったので、
もうちょっと試行錯誤してみます。