0
0

More than 1 year has passed since last update.

【Photoshop】psdファイルのフォーマットについて その2 TypeToolObject

Last updated at Posted at 2022-09-03

前回の続きです。

今回は AdditionalLayerInformationTySh について

以下のようなテキストデータを持つpsdファイルを用意します。

このようなデータを作成した場合、Hello World レイヤーは以下のような情報を持ちます

データサイズ プロパティ名
short Version 常に 1 であることが期待される
Transform Transform 拡大率などの変形情報が含まれる
short TextVersion 常に50である
int DescriptorVersion 常に16である
Descriptor TxLr テキストデータ部分
Descriptor Warp おそらくワープテキスト情報(使っていないので詳細不明)

Transform

struct Transform
{
    public readonly double Xx;
    public readonly double Xy;
    public readonly double Yx;
    public readonly double Yy;
    public readonly double Tx;
    public readonly double Ty;

    public Transform(IPsdReader reader)
    {
        Xx = reader.ReadDouble();
        Xy = reader.ReadDouble();
        Yx = reader.ReadDouble();
        Yy = reader.ReadDouble();
        Tx = reader.ReadDouble();
        Ty = reader.ReadDouble();
    }

    public override string ToString()
    {
        return $"xx:{Xx}, xy:{Xy}, yx{Yx}, yy:{Yy}, tx:{Tx}, ty:{Ty}";
    }
}

テキストを横方向に拡大した場合は xx、縦方向に拡大した場合は yy の数値が変化します。
(tx, ty) はレイヤー内でのテキストの中心位置になります。
(中央より、右寄せ、左寄せなどをした場合この座標を中心に寄せられる)

Descriptor

Descriptor は少し構造が複雑で、これは入れ子構造に出来るデータオブジェクトです。
OSType と呼ばれる各データ型のプロパティを持ちます。
また上記の図を見ても分かる通り、Descriptor が Descriptor を持つような事もあります。

データサイズ プロパティ名
UnicodeString Name
LengthAndKey ClassId
int ItemCount プロパティ数
OSType[ItemCount] Properties プロパティ

LengthAndKey

Descriptor ブロックでは頻繁に使われるデータ形式で、先頭4バイトに長さ(Length)を持ち、次のLengthバイトをKeyとして扱うデータです。
Lengthは0であることもありますが、0である場合は次の4バイトをKeyとします。

OSType

以下の図に書かれている以外にもOSTypeはあるようなのですが、自分が確認する範囲では確認できなかった型が存在するのでそういったものは今回は扱わないようにします。

OSType は最初に LengthAndKey の構造をした Key 情報(プロパティ名)
次にOSTypeの型情報文字列という順番になっており、この型情報によって取得する情報が変化します。

今回はテキスト情報が欲しかったので、実は欲しい情報は EngineData だけだったりします。
(それ以外は今の所使用していないので用途がよくわかっていない)
次回は EngineData についてまとめます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0