Работа с текстовыми слоями в Aspose.PSD для Python

Обзор

Обзор

Aspose.PSD для Python - это мощная библиотека, позволяющая работать с файлами PSD (документы Photoshop) в Python. Одной из ключевых функций этой библиотеки является возможность редактирования текстовых слоев в файлах PSD. В этой статье мы рассмотрим два различных способа редактирования текста в файлах PSD с использованием Aspose.PSD для Python - простой способ и более мощный способ с использованием частей текста.

Простой способ обновления текстового слоя Для обновления текстового слоя в файле PSD с использованием Aspose.PSD для Python вы можете использовать метод update_text класса TextLayer. Этот метод позволяет легко обновлять содержимое текстового слоя. Вот пример кода, демонстрирующий простой способ обновления текстового слоя:

source_file = "text212.psd"
output_file = "Output_text212.psd"
with PsdImage.load(source_file) as img:
image = cast(PsdImage, img)
simple_text = cast(TextLayer, image.layers[2])
simple_text.update_text("Update", Color.red)
image.save(output_file)

Редактирование с использованием частей текста

Более мощный способ обновления текстового слоя с использованием частей текста: Простой способ обновления текстовых слоев в файлах PSD подходит для базового редактирования текста. Однако, если вам нужно иметь больший контроль над стилями и форматированием текста, вы можете использовать более мощный метод с использованием частей текста. Части текста позволяют указывать различные стили и абзацы внутри текстового слоя. Вот пример кода, демонстрирующий этот метод:

text_layer = cast(TextLayer, image.layers[1])
text_data = text_layer.text_data
default_style = text_data.produce_portion().style
default_paragraph = text_data.produce_portion().paragraph
default_style.fill_color = Color.from_name("DimGray")
default_style.font_size = 51
text_data.items[1].style.strikethrough = True
new_portions = text_data.produce_portions(
[
"E=mc",
"2\r",
"Bold",
"Italic\r",
"Lowercasetext"
],
default_style,
default_paragraph
)
new_portions[0].style.underline = True
new_portions[1].style.font_baseline = FontBaseline.SUPERSCRIPT
new_portions[2].style.faux_bold = True
new_portions[3].style.faux_italic = True
new_portions[3].style.baseline_shift = -25
new_portions[4].style.font_caps = FontCaps.SMALL_CAPS
for new_portion in new_portions:
text_data.add_portion(new_portion)
text_data.update_layer_data()

В приведенном выше коде мы сначала получаем доступ к текстовому слою, который мы хотим обновить (image.layers[1]). Затем мы извлекаем объект text_data из текстового слоя, что позволяет нам работать с текстовыми частями. Мы создаем объект default_style и default_paragraph, которые будут использоваться в качестве стиля и абзаца по умолчанию для текстовых частей.

Затем мы определяем текстовые части, которые мы хотим добавить в текстовый слой. Каждая часть представляет собой сегмент текста с собственным стилем и форматированием. В этом примере у нас есть пять текстовых частей - “E=mc”, “2\r”, “Bold”, “Italic\r” и “Lowercasetext”. Мы также обновляем стили этих частей в соответствии с нашими потребностями.

Затем мы перебираем новые части и добавляем их в объект text_data с помощью метода add_portion. Наконец, мы вызываем метод update_layer_data объекта text_data для обновления текстового слоя новыми частями текста.

Заключение Aspose.PSD для Python предоставляет мощные возможности для редактирования текста в файлах PSD. Чтобы обновить содержимое текстового слоя или применить более продвинутые стили и форматирование, Aspose.PSD для Python имеет вас в виду. Используя простой способ или более мощный способ с использованием частей текста, вы легко можете управлять текстовыми слоями в ваших файлах PSD.

Пожалуйста, проверьте полный пример.

Пример

from aspose.psd import Color
from aspose.psd.fileformats.psd import PsdImage, FontBaseline, FontCaps
from aspose.psd.fileformats.psd.layers import TextLayer
from aspose.pycore import cast
def TextLayerUpdatingTest():
source_file = "text212.psd"
output_file = "Output_text212.psd"
with PsdImage.load(source_file) as img:
image = cast(PsdImage, img)
# Smple way to update text layer
simple_text = cast(TextLayer, image.layers[2])
simple_text.update_text("Update", Color.red)
# More powerful way to updateText Layer - using Text Portions with different styles and paragraphs
text_layer = cast(TextLayer, image.layers[1])
text_data = text_layer.text_data
default_style = text_data.produce_portion().style
default_paragraph = text_data.produce_portion().paragraph
default_style.fill_color = Color.from_name("DimGray")
default_style.font_size = 51
text_data.items[1].style.strikethrough = True
new_portions = text_data.produce_portions(
[
"E=mc",
"2\r",
"Bold",
"Italic\r",
"Lowercasetext"
],
default_style,
default_paragraph
)
new_portions[0].style.underline = True # edit text style "E=mc"
new_portions[1].style.font_baseline = FontBaseline.SUPERSCRIPT # edit text style "2\r"
new_portions[2].style.faux_bold = True # edit text style "Bold"
new_portions[3].style.faux_italic = True # edit text style "Italic\r"
new_portions[3].style.baseline_shift = -25 # edit text style "Italic\r"
new_portions[4].style.font_caps = FontCaps.SMALL_CAPS # edit text style "Lowercasetext"
for new_portion in new_portions:
text_data.add_portion(new_portion)
text_data.update_layer_data()
image.save(output_file)