Photoshop Document File(PSD)
フォーマット
バージョンの古い形式(Photoshop 2.0仕様)です。
ここに労力を使うつもりはないので、途中で投げ出してます。
ローダー作った人いたらください(笑)。
う~む、やはりレイヤーの読込・保存もしたいと思い、
久々に触ってみる。うむ、よくこんな物いじってたな。
C++、C#に関してはCode Projectにクラス公開されてる人がいます。
CMYKやLABにも対応してるので、そういう物を使った方が楽だと思う。
Delphi、GraphicEXを使おうかとも思ったけど、MPLというライセンスが
今ひとつ不明瞭だったのと、読込のみ、またレイヤーを読み込んでいる訳ではないので、
結局これじゃ物足りないなと。
PSDにはレイヤー別のイメージと、一枚に合成したイメージの両方が入ってます。
旧バージョンの互換性のためかな?
イメージセクションのデータさえ読んでやれば、ビューアーなど
レイヤー機能を持たないアプリケーションでも、合成演算などの処理
の必要なしに合成画像は表示できます。
レイヤーを一枚一枚読もうと思うと複雑になるけど。
3.0仕様からレイヤー機能がついていて、Reservedセクションが使われているのですが、
レイヤーの画像データもそこにどんどん挟んでいく形。
オフセットアドレス探すのが面倒くさい。
PackBitsの展開
8 * 8 ピクセルの矩形を描いた画像を作ったとすると、圧縮されたバイナリイメージは下記のように。
これを横一ラインずつ解凍 ;
F9 00 ←(00の値が8個続く)
00 00 FB FF 00 00 ←(00の値が1個、FFの値が6個、00の値が1個)
00 00 FB FF 00 00
00 00 FB FF 00 00
00 00 FB FF 00 00
00 00 FB FF 00 00
00 00 FB FF 00 00
F9 00
最初の1バイト (-127~127) が正の数値の時は非連続データの個数-1。次に個数分、データが続きます。
負の数値の時は連続データの個数-1、次の1バイトが値。
00 00 00 00 00 00 00 00
00 FF FF FF FF FF FF 00
00 FF FF FF FF FF FF 00
00 FF FF FF FF FF FF 00
00 FF FF FF FF FF FF 00
00 FF FF FF FF FF FF 00
00 FF FF FF FF FF FF 00
00 00 00 00 00 00 00 00
正 の数値が00しかないので例としてはよくないですね(^-^;
ただ、 圧縮時のImage Dataは先頭に幅1ライン分のデータ長が (画像の高さ * チャンネル数 * Word)分入ってます。
最初、これでひっかかってしまいました(^-^;
横1ラインを何バイトに圧縮したかという情報です。上記のデータだと下記のようなデータがWordで入ってます。
02 00 06 00 06 00 06 00 06 00 06 00 06 00 02,00
↓
2 , 6 , 6 , 6 , 6 , 6 , 6 , 2
参考リンク
最終更新:2007年02月28日 18:19