Обновить текстовый слой в файле psd в C#

Я хочу обновить определенный текстовый слой PSD-файла (всегда один и тот же (найти с его именем)) в C#. Я искал и тестировал много библиотек, которые не работали. Недавно я нашел эту библиотеку на GitHub: https://github.com/bizzehdee/System.Drawing.PSD

Я скачал исходники, попробую это и в C# я могу получить доступ к своему указанному слою, но я не могу его обновить. В классе Layer есть разные атрибуты, но я их не контролирую.

Я не хочу знать, есть ли кто-нибудь, кто может проверить это и помочь мне понять библиотеку. Я спросил автора, но его последнее действие в прошлом году...

Я надеюсь, что вы можете помочь мне!

Большое спасибо.

2 ответа

Вы можете попробовать Aspose.PSD. Он поддерживает простое редактирование текстового слоя и редактирование текстового слоя по частям: https://docs.aspose.com/display/psdnet/Working+With+Text+Layers

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

Пример с частями текста:

string sourceFile = dataDir + "text212.psd";
string outputFile = dataDir + "Output_text212.psd";

using (var img = (PsdImage)Image.Load(sourceFile))
{
    TextLayer textLayer = (TextLayer)img.Layers[1];
    IText textData = textLayer.TextData;
    ITextStyle defaultStyle = textData.ProducePortion().Style;
    ITextParagraph defaultParagraph = textData.ProducePortion().Paragraph;
    defaultStyle.FillColor = Color.DimGray;
    defaultStyle.FontSize = 51;

    textData.Items[1].Style.Strikethrough = true;

    ITextPortion[] newPortions = textData.ProducePortions(new string[]
    {
        "E=mc", "2\r", "Bold", "Italic\r",
        "Lowercasetext"
    },
    defaultStyle,
    defaultParagraph);

    newPortions[0].Style.Underline = true; // edit text style "E=mc"
    newPortions[1].Style.FontBaseline = FontBaseline.Superscript; // edit text style "2\r"
    newPortions[2].Style.FauxBold = true; // edit text style "Bold"
    newPortions[3].Style.FauxItalic = true; // edit text style "Italic\r"
    newPortions[3].Style.BaselineShift = -25; // edit text style "Italic\r"
    newPortions[4].Style.FontCaps = FontCaps.SmallCaps; // edit text style      "Lowercasetext"

    foreach (var newPortion in newPortions)
    {
         textData.AddPortion(newPortion);
    }

    textData.UpdateLayerData();
    img.Save(outputFile);
}

Я не использую Aspose, потому что он платный.

Все, что вам нужно, это AdobeStandard.COM-компонент.

              Photoshop.Application app = new Photoshop.Application();
        Photoshop.Document doc = app.Open(@"test.psd");
        
        for(int i=1;i<= doc.ArtLayers.Count; i++)
        {
            string name = doc.ArtLayers[i].Name;
            if (name.Equals("Title1"))
            {
                doc.ArtLayers[i].TextItem.Contents = "Hello World";
            }
        }
Другие вопросы по тегам