用C#更新psd文件中的文本层

3
我想在C#中更新psd文件的特定文本层(始终相同,通过名称查找)。 我搜索并尝试了许多库,但它们都没有起作用。 最近,我在GitHub上发现了这个库:https://github.com/bizzehdee/System.Drawing.PSD 我下载了源代码,尝试过了,在C#中,我可以访问我的特定图层,但是,我无法更新它。 在图层类中,有不同的属性,但我不能控制它们。
我希望能有人测试并帮助我理解这个库。 我问了作者,但他最后一次活动是去年...
我希望你能帮助我!
非常感谢。

嗨,你有没有解决这个问题的方法? - rkaartikeyan
你好,还没有...我正在与文章的作者交谈,如果我有解决方案,我会在这里写下来。但是如果有人能帮助我们也可以... - user7884267
2个回答

1
您可以尝试使用 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);
}

0

我不使用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";
    }
}

在试用期间,您可以使用Aspose.PSD的试用版本,因为它是免费的。 - Andriy Zymenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接