کار با لایه‌های متنی

افزودن لایه متنی

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);
}