Робота з текстовими шарами
Додавання текстового шару
Aspose.PSD для .NET дозволяє додавати текстовий шар у файл PSD. Кроки для додавання текстового шару у файл PSD настільки прості, як наведено нижче:
- Завантажте файл PSD як зображення за допомогою методу фабрики Load, викликнутого класом Image
- Викличте метод AddTextLayer, який приймає текст та екземпляр класу Rectangle
- Збережіть результат
Наведений нижче фрагмент коду показує, як додати текстовий шар у файл PSD
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string outFileName = dataDir + "OneLayerWithAddedText.psd"; | |
using (PsdImage image = (PsdImage)Image.Load(sourceFileName)) | |
{ | |
image.AddTextLayer("Some text", new Rectangle(50, 50, 100, 100)); | |
PsdOptions options = new PsdOptions(image); | |
image.Save(outFileName, options); | |
} |
Встановлення позиції текстового шару
Aspose.PSD для .NET дозволяє встановлювати позицію текстового шару в файлі PSD. Кроки для встановлення позиції текстового шару у файлі PSD настільки прості, як наведено нижче:
- Завантажте файл PSD як зображення за допомогою фабричного методу Load, викликаного класом Image
- Викличте метод AddTextLayer, вказавши ліву та верхню позиції текстового шару
- Збережіть результат
Наведений нижче фрагмент коду показує, як встановити позицію текстового шару в файлі PSD
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string exportPath = dataDir + "OneLayer_Edited.psd"; | |
int leftPos = 99; | |
int topPos = 47; | |
var im = (PsdImage)Image.Load(sourceFileName); | |
using (im) | |
{ | |
im.AddTextLayer("Some text", new Rectangle(leftPos, topPos, 99, 47)); | |
TextLayer textLayer = (TextLayer)im.Layers[1]; | |
if (textLayer.Left != leftPos || textLayer.Top != topPos) | |
{ | |
throw new Exception("Was created incorrect Text Layer"); | |
} | |
im.Save(exportPath); | |
} |
Отримання текстових властивостей з текстового шару
За допомогою Aspose.PSD для .NET ви можете отримувати та оновлювати текстові властивості різних частин тексту, доступних у текстовому шарі PSD. У цій статті показано, як ви можете отримувати абзаци, стилі та текстові властивості текстового шару та оновлювати їх.
Наведений нижче фрагмент коду показує, як виконати це завдання.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
const double Tolerance = 0.0001; | |
var filePath = "ThreeColorsParagraphs.psd"; | |
var outputPath = "ThreeColorsParagraph_out.psd"; | |
using (var im = (PsdImage)Image.Load(filePath)) | |
{ | |
for (int i = 0; i < im.Layers.Length; i++) | |
{ | |
var layer = im.Layers[i] as TextLayer; | |
if (layer != null) | |
{ | |
var portions = layer.TextData.Items; | |
if (portions.Length != 4) | |
{ | |
throw new Exception(); | |
} | |
// Checking text of every portion | |
if (portions[0].Text != "Old " || | |
portions[1].Text != "color" || | |
portions[2].Text != " text\r" || | |
portions[3].Text != "Second paragraph\r") | |
{ | |
throw new Exception(); | |
} | |
// Checking paragraphs data | |
// Paragraphs have different justification | |
if ( | |
portions[0].Paragraph.Justification != 0 || | |
portions[1].Paragraph.Justification != 0 || | |
portions[2].Paragraph.Justification != 0 || | |
portions[3].Paragraph.Justification != 2) | |
{ | |
throw new Exception(); | |
} | |
// All other properties of first and second paragraph are equal | |
for (int j = 0; j < portions.Length; j++) | |
{ | |
var paragraph = portions[j].Paragraph; | |
if (Math.Abs(paragraph.AutoLeading - 1.2) > Tolerance || | |
paragraph.AutoHyphenate != false || | |
paragraph.Burasagari != false || | |
paragraph.ConsecutiveHyphens != 8 || | |
Math.Abs(paragraph.StartIndent) > Tolerance || | |
Math.Abs(paragraph.EndIndent) > Tolerance || | |
paragraph.EveryLineComposer != false || | |
Math.Abs(paragraph.FirstLineIndent) > Tolerance || | |
paragraph.GlyphSpacing.Length != 3 || | |
Math.Abs(paragraph.GlyphSpacing[0] - 1) > Tolerance || | |
Math.Abs(paragraph.GlyphSpacing[1] - 1) > Tolerance || | |
Math.Abs(paragraph.GlyphSpacing[2] - 1) > Tolerance || | |
paragraph.Hanging != false || | |
paragraph.HyphenatedWordSize != 6 || | |
paragraph.KinsokuOrder != 0 || | |
paragraph.LetterSpacing.Length != 3 || | |
Math.Abs(paragraph.LetterSpacing[0]) > Tolerance || | |
Math.Abs(paragraph.LetterSpacing[1]) > Tolerance || | |
Math.Abs(paragraph.LetterSpacing[2]) > Tolerance || | |
paragraph.LeadingType != LeadingMode.Auto || | |
paragraph.PreHyphen != 2 || | |
paragraph.PostHyphen != 2 || | |
Math.Abs(paragraph.SpaceBefore) > Tolerance || | |
Math.Abs(paragraph.SpaceAfter) > Tolerance || | |
paragraph.WordSpacing.Length != 3 || | |
Math.Abs(paragraph.WordSpacing[0] - 0.8) > Tolerance || | |
Math.Abs(paragraph.WordSpacing[1] - 1.0) > Tolerance || | |
Math.Abs(paragraph.WordSpacing[2] - 1.33) > Tolerance || | |
Math.Abs(paragraph.Zone - 36.0) > Tolerance) | |
{ | |
throw new Exception(); | |
} | |
} | |
// Checking style data | |
// Styles have different colors and font size | |
if (Math.Abs(portions[0].Style.FontSize - 12) > Tolerance || | |
Math.Abs(portions[1].Style.FontSize - 12) > Tolerance || | |
Math.Abs(portions[2].Style.FontSize - 12) > Tolerance || | |
Math.Abs(portions[3].Style.FontSize - 10) > Tolerance) | |
{ | |
throw new Exception(); | |
} | |
if (portions[0].Style.FillColor != Color.FromArgb(255, 145, 0, 0) || | |
portions[1].Style.FillColor != Color.FromArgb(255, 201, 128, 2) || | |
portions[2].Style.FillColor != Color.FromArgb(255, 18, 143, 4) || | |
portions[3].Style.FillColor != Color.FromArgb(255, 145, 42, 100)) | |
{ | |
throw new Exception(); | |
} | |
for (int j = 0; j < portions.Length; j++) | |
{ | |
var style = portions[j].Style; | |
if (style.AutoLeading != true || | |
style.HindiNumbers != false || | |
style.Kerning != 0 || | |
style.Leading != 0 || | |
style.StrokeColor != Color.FromArgb(255, 175, 90, 163) || | |
style.Tracking != 50) | |
{ | |
throw new Exception(); | |
} | |
} | |
// Example of text editing | |
portions[0].Text = "Hello "; | |
portions[1].Text = "World"; | |
// Example of text portions removing | |
layer.TextData.RemovePortion(3); | |
layer.TextData.RemovePortion(2); | |
// Example of adding new text portion | |
var createdPortion = layer.TextData.ProducePortion(); | |
createdPortion.Text = "!!!\r"; | |
layer.TextData.AddPortion(createdPortion); | |
portions = layer.TextData.Items; | |
// Example of paragraph and style editing for portions | |
// Set right justification | |
portions[0].Paragraph.Justification = 1; | |
portions[1].Paragraph.Justification = 1; | |
portions[2].Paragraph.Justification = 1; | |
// Different colors for each style. The will be changed, but rendering is not fully supported | |
portions[0].Style.FillColor = Color.Aquamarine; | |
portions[1].Style.FillColor = Color.Violet; | |
portions[2].Style.FillColor = Color.LightBlue; | |
// Different font. The will be changed, but rendering is not fully supported | |
portions[0].Style.FontSize = 6; | |
portions[1].Style.FontSize = 8; | |
portions[2].Style.FontSize = 10; | |
layer.TextData.UpdateLayerData(); | |
im.Save(outputPath, new PsdOptions(im)); | |
break; | |
} | |
} | |
} |
Ось ще один приклад, який демонструє, як розробник може отримати форматування тексту різних частин тексту від TextLayer за допомогою Aspose.PSD для .NET.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
{ | |
List<ITextPortion> regularText = new List<ITextPortion>(); | |
List<ITextPortion> boldText = new List<ITextPortion>(); | |
List<ITextPortion> italicText = new List<ITextPortion>(); | |
var layers = psdImage.Layers; | |
for (int index = 0; index < layers.Length; index++) | |
{ | |
var layer = layers[index]; | |
if (!(layer is TextLayer)) | |
{ | |
continue; | |
} | |
var textLayer = (TextLayer)layer; | |
// gets fonts that contains in text layer | |
var fonts = textLayer.GetFonts(); | |
var textPortions = textLayer.TextData.Items; | |
foreach (var textPortion in textPortions) | |
{ | |
TextFontInfo font = fonts[textPortion.Style.FontIndex]; | |
if (font != null) | |
{ | |
switch (font.Style) | |
{ | |
case FontStyle.Regular: | |
regularText.Add(textPortion); | |
break; | |
case FontStyle.Bold: | |
boldText.Add(textPortion); | |
break; | |
case FontStyle.Italic: | |
italicText.Add(textPortion); | |
break; | |
default: | |
throw new ArgumentOutOfRangeException(); | |
} | |
} | |
} | |
} | |
} |
Оновлення текстового шару у файлі PSD
Aspose.PSD для .NET дозволяє маніпулювати текстом у текстовому шарі файлу PSD. Будь ласка, використовуйте клас Aspose.PSD.FileFormats.Psd.Layers.TextLayer для оновлення тексту в шарі PSD. Наведений нижче фрагмент коду завантажує файл PSD, отримує доступ до текстового шару, оновлює текст та зберігає файл PSD під новою назвою за допомогою методу Aspose.PSD.FileFormats.Psd.Layers.TextLayer.UpdateText.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load a PSD file as an image and cast it into PsdImage | |
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "layers.psd")) | |
{ | |
foreach (var layer in psdImage.Layers) | |
{ | |
if (layer is TextLayer) | |
{ | |
TextLayer textLayer = layer as TextLayer; | |
textLayer.UpdateText("test update", new Point(0, 0), 15.0f, Color.Purple); | |
} | |
} | |
psdImage.Save(dataDir + "UpdateTextLayerInPSDFile_out.psd"); | |
} |
Підтримка текстових шарів у режимі виконання
У цій статті показано, як додавати текстові шари на льоту для зображень PSD. Наведений нижче фрагмент коду.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Add color overlay layer effect at runtime | |
string sourceFileName = dataDir + "ThreeRegularLayers.psd"; | |
string exportPath = dataDir + "ThreeRegularLayersChanged.psd"; | |
var loadOptions = new PsdLoadOptions() | |
{ | |
LoadEffectsResource = true | |
}; | |
using (var im = (PsdImage)Image.Load(sourceFileName, loadOptions)) | |
{ | |
var effect = im.Layers[1].BlendingOptions.AddColorOverlay(); | |
effect.Color = Color.Green; | |
effect.Opacity = 128; | |
effect.BlendMode = BlendMode.Normal; | |
im.Save(exportPath); | |
} |