概要

概要

PSDファイルには3種類のマスクがあります:

  1. クリッピングマスク
  2. ラスターマスク
  3. ベクターマスク

この記事ではこれら3種類をカバーします。

クリッピングマスク

クリッピングマスクは、特にJavaでのグラフィックデザインや画像編集ソフトウェアにおいて強力な機能です。別のレイヤーの形状や内容に基づいて1つのレイヤーの表示を正確に制御することができます。基本的に、クリッピングマスクは他のレイヤーの形状にレイヤーの表示を制限します。

Javaでクリッピングマスクを実装するには、まず2つのレイヤーが必要です。ベースレイヤーとクリッピングする意図のあるレイヤーです。ベースレイヤーは残り表示される形状やエリアを定義し、クリッピングされるレイヤーにはベースレイヤーの形状に適合するコンテンツが含まれています。

Javaでクリッピングマスクが適用されると、クリッピングされたレイヤーのコンテンツは基本レイヤーの境界内でのみ表示されます。これらの境界の外側のコンテンツは非表示またはクリップされます。

クリッピングマスクは、特に画像やアートワークの特定の領域にテクスチャやパターンなどの効果を適用する際に特に有用です。クリッピングマスクを使用することで、効果を希望するエリアに限定し、画像の残りに影響を与えることなく効果を適用できます。

詳細については、ページの最後にある例を参照してください。

ラスターマスク

Javaファイル内のラスターマスクは、レイヤー内の特定の領域の表示を管理するために使用されます。マスクされた領域を定義するために数学的形状を使用するベクターマスクとは異なり、ラスターマスクはピクセルベースの情報に依存して可視または非表示の領域を決定します。

ラスターマスクには、レイヤーに適用されるグレースケール画像が含まれます。マスクの白い領域は可見性を示し、黒い領域は非表示の部分を表します。灰色の色合いは、部分的な透明性や半透明の領域を作成できます。

詳細を理解するために、ページの最後にある例を参照してください。

ベクターマスク

Javaファイル内のベクターマスクは、数学的形状を基にしてレイヤー内の特定の領域の表示を定義するために使用される多目的ツールです。ピクセルベースのデータに依存するラスターマスクとは異なり、ベクターマスクはパスと曲線を使用して、スムーズでスケーラブルなマスクされた領域を作成します。

ベクターマスクは基本的にレイヤーに適用されるパスで構成されます。このパスの形状がレイヤーのどの部分が表示され、どの部分が非表示かを決定します。パスの制御点や曲線を操作することで、正確で入念なマスクされた領域を作成できます。

ベクターマスクを追加する方法については、ベクターマスクページを参照してください。

public class LayerMasksEditingTest {
public static void main(String[] args) {
String source = "MaskExample.psd";
String outputOriginal = "original_mask_features.psd";
String outputUpdated = "updated_mask_features.psd";
try (PsdImage image = (PsdImage) Image.load(source)) {
image.save(outputOriginal);
// Setting Clipping Masks
image.getLayers()[4].setClipping((byte) 1);
image.getLayers()[5].setClipping((byte) 1);
// Adding Mask to Layer
LayerMaskDataShort mask = new LayerMaskDataShort();
mask.setLeft(50);
mask.setTop(213);
mask.setRight(mask.getLeft() + 150);
mask.setBottom(mask.getTop() + 150);
byte[] maskData = new byte[(mask.getRight() - mask.getLeft()) * (mask.getBottom() - mask.getTop())];
for (int index = 0; index < maskData.length; index++) {
maskData[index] = (byte) (100 + index % 100);
}
mask.setImageData(maskData);
image.getLayers()[2].addLayerMask(mask);
image.save(outputUpdated);
}
}
}