Aspose.PSD for Javaでテキストレイヤーを操作する方法

Contents
[ ]

概要

概要

Aspose.PSD for Javaは、Javaアプリケーション内でPSD(Photoshop Document)ファイルをシームレスに操作するために設計された堅牢なライブラリです。このライブラリの多機能の中でも、PSDファイル内のテキストレイヤーを編集するための包括的なサポートを提供しています。この記事では、Aspose.PSD for Javaを使用してPSDファイル内のテキストを編集する2つの異なる方法について詳しく説明します - ストレートフォワードな方法とより複雑な方法でのテキストポーションの利用。

** テキストレイヤーを更新する簡単な方法 ** Aspose.PSD for Javaを使用してPSDファイル内のテキストレイヤーを更新する方法は直感的です。TextLayerクラスのupdateTextメソッドは、テキストレイヤー内のテキストコンテンツを簡単に更新することを可能にします。以下は、テキストレイヤーを更新する単純な方法を示すコードスニペットの例です:

public class Main {
public static void main(String[] args) {
String sourceFile = "text212.psd";
String outputFile = "Output_text212.psd";
try (PsdImage image = (PsdImage) PsdImage.load(sourceFile)) {
TextLayer simpleText = (TextLayer) image.getLayers()[2];
simpleText.updateText("Update", Color.getRed());
image.save(outputFile);
}
}
}

** テキストポーションを使用した編集 **

テキストポーションを利用したテキストレイヤーの更新の拡張方法:基本的なテキストの変更には簡単な方法で十分ですが、テキストのスタイリングやフォーマットに細かい制御が必要な場合には、テキストポーションを活用することでより強力な解決策が提供されます。テキストポーションを使用すると、テキストレイヤー内で異なるスタイルや段落を設定できます。以下は、このアプローチを示すコードスニペットの例です:

public class Main {
public static void main(String[] args) {
String sourceFile = "text212.psd";
try (PsdImage image = (PsdImage) PsdImage.load(sourceFile)) {
// Assuming the necessary imports and classes are available
TextLayer textLayer = (TextLayer) image.getLayers()[1];
IText textData = textLayer.getTextData();
ITextStyle defaultStyle = textData.producePortion().getStyle();
ITextParagraph defaultParagraph = textData.producePortion().getParagraph();
defaultStyle.setFillColor(Color.fromName("DimGray"));
defaultStyle.setFontSize(51);
textData.getItems()[1].getStyle().setStrikethrough(true);
String[] strings = new String[]{"E=mc", "2\r", "Bold", "Italic\r", "Lowercasetext"};
ITextPortion[] newPortions = textData.producePortions(
strings,
defaultStyle,
defaultParagraph
);
newPortions[0].getStyle().setUnderline(true);
newPortions[1].getStyle().setFontBaseline(FontBaseline.Superscript);
newPortions[2].getStyle().setFauxBold(true);
newPortions[3].getStyle().setFauxItalic(true);
newPortions[3].getStyle().setBaselineShift(-25);
newPortions[4].getStyle().setFontCaps(FontCaps.SmallCaps);
for (ITextPortion newPortion : newPortions) {
textData.addPortion(newPortion);
}
textData.updateLayerData();
}
}
}

提供されたコードでは、まず目標のテキストレイヤーにアクセスし(たとえばimage.getLayers()[1])、次にテキストレイヤーからtextDataオブジェクトを取得して、テキストポーションを操作します。デフォルトのスタイルオブジェクトと段落オブジェクト(それぞれdefaultStyleとdefaultParagraph)は、テキストポーションのベースラインスタイルと段落として作成されました。

次に、テキストレイヤーに組み込まれるテキストポーションを定義します。各ポーションは、独自のスタイルとフォーマットを持つテキストの独自のセグメントを表します。この例では、5つのテキストポーション - “E=mc”, “2\r”, “太字”, “イタリック\r”, “小文字のテキスト” - を定義し、それぞれのスタイルを調整します。

その後、新しいポーションを反復処理して、addPortionメソッドを使用してそれらをtextDataオブジェクトに追加します。最後に、textDataオブジェクトのupdateLayerDataメソッドを呼び出すことで、新しく定義されたテキストポーションを使用してテキストレイヤーを更新できます。

結論 Aspose.PSD for Javaは、PSDファイル内でのテキスト操作に堅牢な機能を提供しています。テキストコンテンツの更新や高度なスタイリングおよびフォーマットの実装が必要な場合でも、Aspose.PSD for Javaは必要なツールを提供しています。簡単なアプローチを使用するか、テキストポーションを利用したより洗練された方法を採用することで、PSDファイル内のテキストレイヤーをシームレスに操作できます。

詳細については、完全な例をご参照ください。

public class TextLayerUpdatingTest {
public static void main(String[] args) {
String sourceFile = "text212.psd";
String outputFile = "Output_text212.psd";
try (PsdImage img = (PsdImage) PsdImage.load(sourceFile)) {
// Simple way to update text layer
TextLayer simpleText = (TextLayer) img.getLayers()[2];
simpleText.updateText("Update", Color.getRed());
// More powerful way to update text layer - using Text Portions with different styles and paragraphs
TextLayer textLayer = (TextLayer) img.getLayers()[1];
IText textData = textLayer.getTextData();
ITextStyle defaultStyle = textData.producePortion().getStyle();
ITextParagraph defaultParagraph = textData.producePortion().getParagraph();
defaultStyle.setFillColor(Color.fromName("DimGray"));
defaultStyle.setFontSize(51);
textData.getItems()[1].getStyle().setStrikethrough(true);
// Update text styles for different portions
ITextPortion[] newPortions = textData.producePortions(new String[]{
"E=mc",
"2\r",
"Bold",
"Italic\r",
"Lowercasetext"},
defaultStyle,
defaultParagraph
);
newPortions[0].getStyle().setUnderline(true); // Edit text style "E=mc"
newPortions[1].getStyle().setFontBaseline(FontBaseline.Superscript); // Edit text style "2\r"
newPortions[2].getStyle().setFauxBold(true); // Edit text style "Bold"
newPortions[3].getStyle().setFauxItalic(true); // Edit text style "Italic\r"
newPortions[3].getStyle().setBaselineShift(-25); // Edit text style "Italic\r"
newPortions[4].getStyle().setFontCaps(FontCaps.SmallCaps); // Edit text style "Lowercasetext"
for (ITextPortion newPortion : newPortions) {
textData.addPortion(newPortion);
}
textData.updateLayerData();
img.save(outputFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}