前回の続きです。
今回は AdditionalLayerInformation の TySh について
以下のようなテキストデータを持つ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
についてまとめます。