Loading Text Layers

Graphics Mill supports loading layers of different types from PSD files. Text layers store a text string and its appearance settings (font, color, paragraph, etc.) along with a bitmap. You can create personalized graphics by using text layers as placeholders in a PSD template. Just change text in a placeholder and merge PSD file layers. For more information see the Merging Layers topic. This article describes how to work with text layers, including transformed text and text on a curve.

Common Text Settings

To start reading a PSD file use the PsdReader(String) constructor, which accepts a filename as an argument.

Note

While a PSD file is opened by Graphics Mill, no other application can delete or modify the file.

To access layers use the PsdReader.Frames property which returns a collection of PsdFrame instances. A text layer is represented by the PsdTextFrame class which extends the PsdFrame class with a text-specific functionality. For each text layer the following data can be obtained:

The following code reads a PSD file, iterates through its layers, and writes some information about a text layer to the console:

C#
//create PSD reader
using (var reader = new PsdReader(@"Images\BusinessCard.psd"))
{
   
//read layers and check for a text layer
   
for (int i = 0; i < reader.Frames.Count; i++)
   
{
       
using (var frame = reader.Frames[i])
       
{
           
if (frame.Type == FrameType.Text)
           
{
               
var textFrame = (PsdTextFrame) frame;
               
Console.WriteLine("Font name: " + textFrame.Font.Name);
               
Console.WriteLine("Font size: " + textFrame.Font.Size);
               
Console.WriteLine("Text caps: " + textFrame.Caps);
               
Console.WriteLine("Text justification: " + textFrame.Justification);
               
Console.WriteLine("Paragraph first line indent: " + textFrame.Paragraph.FirstLineIndent);
               
Console.WriteLine("Text tracking: " + textFrame.Tracking);
               
Console.WriteLine("Text box: " + textFrame.TextBox);
               
break;
           
}
       
}
   
}
}

Text on Curves and Transformed Text Settings

For transformed and curved text additionally you can extract

The following code reads a PSD file, iterates through its layers, and writes information to the console about a curve which the curved text is located along:

C#
            //create PSD reader
           
using (var reader = new PsdReader(@"Images\Seal.psd"))
           
{
               
//read layers and check for a text layer
               
for (int i = 0; i < reader.Frames.Count; i++)
               
{
                   
using (var frame = reader.Frames[i])
                   
{
                       
if (frame.Type == FrameType.Text)
                       
{
                           
var textFrame = (PsdTextFrame)frame;
                           
Console.WriteLine("Text path length in pixels: " + textFrame.Path.GetLength());
                           
if (textFrame.Path.Points.Count > 0)
                           
{
                               
Console.WriteLine("Text path points: ");
                               
for (int j = 0; j < textFrame.Path.Points.Count; j++)
                                   
Console.WriteLine("point " + j + ": " + textFrame.Path.Points[j].Type + " (" +
                                        textFrame
.Path.Points[j].X + ";" + textFrame.Path.Points[j].Y + ") ");
                           
}
                           
Console.WriteLine("Text box: " + textFrame.TextBox);
//                            break;
                       
}
                   
}
               
}
           
}

For more information about the paths, see the Working with Paths topic.

To get a layer transformation matrix you can do as follows:

C#
            //create PSD reader
           
using (var reader = new PsdReader(@"Images\Seal.psd"))
           
{
               
//read layers and check for a text layer
               
for (int i = 0; i < reader.Frames.Count; i++)
               
{
                   
using (var frame = reader.Frames[i])
                   
{
                       
if (frame.Type == FrameType.Text)
                       
{
                           
var textFrame = (PsdTextFrame)frame;
                           
Console.WriteLine("Text transformation matrix: ");
                           
var matrix = textFrame.Transform.Elements;
                           
Console.WriteLine("( " + matrix[0] + " " + matrix[2] + " " + matrix[4] + " )");
                           
Console.WriteLine("( " + matrix[1] + " " + matrix[3] + " " + matrix[5] + " )");
//                          break;
                       
}
                   
}
               
}
           
}

For more information about transformation matrices, see the Affine and Projective Transformations topic.

See Also

Reference

Manual