Робота з текстовими шарами
Додавання текстового шару
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); | |
| } |