PSDファイルの作成、オープン、保存

画像をPSD形式にエクスポート

PSD(Photoshop document)は、画像を操作するためにAdobe Photoshopで使用されるデフォルトのファイル形式です。Aspose.PSDを使用すると、PSDファイルにファイルを読み込んだり、編集したり、保存したりできるため、PhotoShopで開いて編集することができます。この記事では、Aspose.PSDでファイルをPSD形式で保存する方法と、この形式で保存する際に使用できるいくつかの設定について説明します。PsdOptionsは、PSD形式に画像をエクスポートするために使用されるImageOptionsネームスペース内の特殊なクラスです。PSDにエクスポートするには、Imageクラスのインスタンスを作成します。これは、既存の画像ファイル(サムネイルなど)からロードされるか、ゼロから作成されます。この記事では、ゼロから画像を作成する方法が説明されています。以下の例では、画像がゼロから作成されます。作成されてピクセルデータが設定されたら、ImageクラスのSaveメソッドを使用して画像を保存し、2番目の引数としてPsdOptionsオブジェクトを提供します。PsdOptionsクラスのいくつかのプロパティは、高度な変換に設定できます。いくつかのプロパティにはColorMode、CompressionMethod、Versionがあります。Aspose.PSDは、次の圧縮方法をCompressionMethod列挙型を介してサポートしています:

  • CompressionMethod.Raw
  • CompressionMethod.RLE
  • CompressionMethod.ZipWithoutProtection
  • CompressionMethod.ZipWithProtection

以下のカラーモードは、ColorModes列挙型でサポートされています:

  • ColorModes.Bitmap
  • ColorModes.Grayscale
  • ColorModes.RGB

PSD v4.0、v5.0およびそれ以上のサムネイルリソースなど、追加のリソースを追加できます。また、PSD v4.0およびそれ以上のグリッドやガイドリソースも追加できます。以下のコードは、bmpファイルをゼロから作成し、ピクセルを設定し、RLE圧縮とグレースケールカラーモードでPSDに保存するものです。以下のコードスニペットは、ImageをPSDにエクスポートする方法を示しています。

String dataDir = Utils.getDataDir(ExportImageToPSD.class) + "PSD/";
// Create a new image from scratch.
try (PsdImage bmpImage = new PsdImage(300, 300)) {
// Fill image data.
Graphics graphics = new Graphics(bmpImage);
graphics.clear(Color.getWhite());
Pen pen = new Pen(Color.getBrown());
graphics.drawRectangle(pen, bmpImage.getBounds());
// Create an instance of PsdOptions, Set it's various properties Save image to disk in PSD format
PsdOptions psdOptions = new PsdOptions();
psdOptions.setColorMode(ColorModes.Rgb);
psdOptions.setCompressionMethod(CompressionMethod.Raw);
psdOptions.setVersion(4);
bmpImage.save(dataDir + "ExportImageToPSD_output.psd", psdOptions);
}

PSDレイヤーに画像をインポート

この記事では、Aspose.PSDを使用してPSDレイヤーに画像を追加またはインポートする方法を示しています。Aspose.PSD APIは、この目標を達成するための効率的で使いやすいメソッドを公開しています。Aspose.PSDは、LayerクラスのDrawImageメソッドを公開しており、PSDファイルに画像を追加/インポートするためにこのメソッドを使用します。DrawImageメソッドには、PSD画像レイヤーを指定する必要があります。PSDレイヤーに画像をインポートする手順は以下の通りです:

  • Imageクラスが公開する工場メソッドLoadを使用して画像としてPSDファイルをロードします。
  • Layerクラスのインスタンスを作成し、PSD画像レイヤーを割り当てます。
  • 追加する画像をロードするか、ゼロから作成します。
  • 位置と画像インスタンスを指定してLayer.DrawImageメソッドを呼び出します。
  • 結果を保存します。

以下のコードスニペットは、PSDレイヤーに画像をインポートする方法を示しています。

String dataDir = Utils.getDataDir(ImportImageToPSDLayer.class) + "PSD/";
// Load a PSD file as an image and caste it into PsdImage
try (PsdImage image = (PsdImage) Image.load(dataDir + "sample.psd");
//Extract a layer from PSDImage
Layer layer = image.getLayers()[1];
// Create an image that is needed to be imported into the PSD file.
PsdImage drawImage = new PsdImage(200, 200)) {
// Fill image surface as needed.
Graphics g = new Graphics(drawImage);
g.clear(Color.getYellow());
// Call DrawImage method of the Layer class and pass the image instance.
layer.drawImage(new Point(10, 10), drawImage);
// Save the results to output path.
image.save(dataDir + "ImportImageToPSDLayer_out.psd");
}

PSDファイルからサムネイルを作成

PSDはAdobeのPhotoshopアプリケーションのネイティブドキュメント形式です。Adobe Photoshop(バージョン5.0以降)では、プレビュー表示用のサムネイル情報が含まれるイメージリソースブロックに保存されます。Aspose.PSD APIは、PSDファイルのリソースにアクセスするための使いやすいメカニズムを提供しています。これらのリソースには、サムネイルリソースも含まれ、それを取得して必要に応じてディスクに保存できます。以下のコードスニペットは、PSDファイルからサムネイルを作成する方法を示しています。

String dataDir = Utils.getDataDir(CreateThumbnailsFromPSDFiles.class) + "PSD/";
// Load a PSD file as an image and caste it into PsdImage
try (PsdImage image = (PsdImage) Image.load(dataDir + "sample.psd")) {
int index = 0;
// Iterate over the PSD resources
for (int i = 0; i < image.getImageResources().length; i++) {
index++;
// Check if the resource is of thumbnail type
if (image.getImageResources()[i] instanceof ThumbnailResource) {
// Retrieve the ThumbnailResource and Check the format of the ThumbnailResource
ThumbnailResource thumbnail = (ThumbnailResource) image.getImageResources()[i];
if (thumbnail.getFormat() == ThumbnailFormat.KJpegRgb) {
// Create a new BmpImage by specifying the width and height, Store the pixels of thumbnail on to the newly created BmpImage and save image
PsdImage thumnailImage = new PsdImage(thumbnail.getWidth(), thumbnail.getHeight());
thumnailImage.savePixels(thumnailImage.getBounds(), thumbnail.getThumbnailData());
thumnailImage.save(dataDir + "CreateThumbnailsFromPSDFiles_out_" + i + ".bmp");
}
}
}
}

インデックス付きPSDファイルの作成

Aspose.PSD for Java APIは、ゼロからインデックス付きPSDファイルを作成できます。この記事では、PsdOptionsおよびPsdImageクラスの使用方法を示し、新しく作成されたキャンバス上に図形を描画しながら、インデックス付きPSDを作成する手順を説明します。インデックス付きPSDファイルを作成するには、次の簡単な手順が必要です。

  • PsdOptionsクラスのインスタンスを作成し、そのソースを設定します。
  • PsdOptionsのColorModeプロパティをColorModes.Indexedに設定します。
  • RGB空間から色の新しいパレットを作成し、それをPsdOptionsのPaletteプロパティとして設定します。
  • 必要な圧縮アルゴリズムにCompressionMethodプロパティを設定します。
  • PsdImage.Createメソッドを呼び出して新しいPSD画像を作成します。
  • 必要に応じてグラフィックスを描画したり、他の操作を実行します。
  • すべての変更を確定するためにPsdImage.Saveメソッドを呼び出します。

以下のコードスニペットは、インデックス付きPSDファイルを作成する方法を示しています。

String dataDir = Utils.getDataDir(CreateIndexedPSDFiles.class) + "PSD/";
// Create an instance of PsdOptions and set it's properties
PsdOptions createOptions = new PsdOptions();
createOptions.setSource(new FileCreateSource(dataDir + "Newsample_out.psd", false));
createOptions.setColorMode(ColorModes.Indexed);
createOptions.setVersion(5);
// Create a new color palette having RGB colors, Set Palette property & compression method
Color[] palette = {Color.getRed(), Color.getGreen(), Color.getBlue(), Color.getYellow()};
createOptions.setPalette(new PsdColorPalette(palette));
createOptions.setCompressionMethod(CompressionMethod.RLE);
// Create a new PSD with PsdOptions created previously
try (Image psd = Image.create(createOptions, 500, 500)) {
// Draw some graphics over the newly created PSD
Graphics graphics = new Graphics(psd);
graphics.clear(Color.getWhite());
graphics.drawEllipse(new Pen(Color.getRed(), 6), new Rectangle(0, 0, 400, 400));
psd.save();
}

PSDレイヤーをラスターイメージにエクスポート

Aspose.PSD for Javaを使用すると、PSDファイルのレイヤーをラスターイメージにエクスポートできます。PSDレイヤーを画像にエクスポートするには、Aspose.PSD.FileFormats.Psd.Layers.Layer.Saveメソッドを使用してレイヤーを画像にエクスポートします。次のサンプルコードは、PSDファイルをロードし、各レイヤーをPNG画像にエクスポートする方法を示しています。Aspose.PSD.FileFormats.Psd.Layers.Layer.Saveを使用してすべてのレイヤーをPNG画像にエクスポートした後は、お気に入りのイメージビューアでそれらを開くことができます。以下のコードスニペットは、PSDレイヤーをラスターイメージにエクスポートする方法を示しています。

String dataDir = Utils.getDataDir(ExportPSDLayerToRasterImage.class) + "PSD/";
// Load a PSD file as an image and caste it into PsdImage
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "sample.psd")) {
// Create an instance of PngOptions class
PngOptions pngOptions = new PngOptions();
pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
// Loop through the list of layers
for (int i = 0; i < psdImage.getLayers().length; i++) {
// Convert and save the layer to PNG file format.
psdImage.getLayers()[i].save(String.format("layer_out{0}.png", i + 1), pngOptions);
}
}