עבודה עם שכבות טקסט

הוספת שכבת טקסט

Aspose.PSD עבור .NET מאפשר לך להוסיף שכבת טקסט בקובץ PSD. השלבים להוספת שכבת טקסט בקובץ PSD פשוטים כמו שמוצגים להלן:

  • טען קובץ PSD כתמונה באמצעות שיטת היצרן Load החשוף על ידי Image class
  • קרא לשיטת 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 class
  • קרא לשיטת ההוספה של שכבת הטקסט וציין את מיקומי השמאל והעליון של שכבת הטקסט
  • שמור את התוצאות

הקטע של הקוד הנ"ל מראה לך כיצד להגדיר את מיקום שכבת הטקסט בקובץ 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 method.

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