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