PSD画像のレイヤーを一枚ずつPNGで保存する

| | コメント(0) | トラックバック(0) この記事をはてなブックマークに追加
 いま吉里吉里のスクリプティング統合環境アプリケーションを作っています。
使用してるのは Visual C# 2005 です。(現在思ったより規模が大きくなってしまったので面倒くさがらずC++で開発初めていれば良かったと思っているのは内緒だ)
なるべく文字を打ち込まずにシナリオをスクリプト化できるようにする、というコンセプトのツールです。基本的にオレ専用だけど。
打ち込みツールを作るメリットは打ち込みの時間短縮とスクリプトバグの混入を防げるという点です。
さてそのためにはグラフィックをツール内部で扱うことがともかく必須項目ですね。
 具体的には画像を表示するのにファイル名を指定したり表示位置の数値を入力するところで、サムネイルから画像を選べたりイメージをドラッグしてゲーム画面上での表示位置を決めたりと感覚的な打ち込みができます。
テキストで打ち込みをしたことがある人はこれができることがどれほど便利かわかると思います。
 前フリ長かったですね。ここからが本題。
まずはPSDファイルの読み込みについて。イチからコーデックを書いてるとそれだけでプロジェクトが立ち上がってしまうので、ここはライブラリを利用。
まちみのな さんが PSD Parser を日本語化されていますので、ありがたく使わせていただきます。
落としてきたアーカイブに Psd.sln があるのでソリューションを開き、Endogine.Codecs.Photoshop をビルドします。
自分のツールに Endogine.dll と Endogine.Codecs.Photoshop.dll の参照設定を加えます。
で、以下PSDファイルの読み込みとレイヤーの走査。
using Endogine.Codecs.Photoshop;	//ファイルの最初にこれね

......

    //実際の処理
    Document psd = new Document(FilePath);
    foreach (Layer layer in psd.Layers)
    {
        Image layer_img = layer.Bitmap;
    }
はい、これだけでできました。
layer_img に順番にレイヤーの画像が入るのでごにょごにょやります。
素晴らしすぎる。

さて、レイヤーが切り出せたのでこれをPNGファイルに保存します。
たとえばファイル名を [レイヤー名].png で保存するとすると以下のようになります。
using Endogine.Codecs.Photoshop;

......

    //実際の処理
    Document psd = new Document(FilePath);
    foreach (Layer layer in psd.Layers)
    {
        Image layer_img = layer.Bitmap;

        //PNG出力
        Bitmap layer_bmp = new Bitmap(layer_img);
        layer_bmp.Save(layer.Name + ".png"
                      , System.Drawing.Imaging.ImageFormat.Png);
    }
はい。簡単ですね。

実はオレPNGのファイル出力をするのに、まず外部ライブラリを探すところから始めてしまってはまりました。
や、PNGのファイルフォーマットの勉強になったので無駄ではないんだけどね。
2日もそれだけに費やしたので、一発でできることが判明したときは若干ヘコみましたな。
ちゃんと最初に確認しろよって話でした。

そんな感じです。
よしなに。

トラックバック(0)

このブログ記事を参照しているブログ一覧: PSD画像のレイヤーを一枚ずつPNGで保存する

このブログ記事に対するトラックバックURL: http://www.studio-wiz.com/mt/mt-tb.cgi/140

コメントする

このブログ記事について

このページは、マピロが2009年6月 2日 11:54に書いたブログ記事です。

ひとつ前のブログ記事は「今週の『バクマン。』『アイシールド21』」です。

次のブログ記事は「『バクマン。』の3巻が出ました」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.14