Aspose.PSD for Javaでテキストレイヤーを操作する方法
概要
概要
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(); | |
} | |
} | |
} |