Att automatisera smart objekt ersättning hjälper dig att skapa variationer av samma Photoshop-mall med olika bilder. Med Aspose.PSD för .NET kan du ladda en PSD, hitta smarta objekt lager, ersätta deras inbäddade innehåll med en ny bild, och spara det uppdaterade dokumentet. Följande exempel använder inline, löpbar kod som fokuserar på vanliga fall.

förutsättningar

  • .NET 6 eller senare
  • Nu är: Aspose.PSD
dotnet add package Aspose.PSD

Ersätt det första smarta objektet i en PSD

Detta exempel laddar en PSD, hittar den första SmartObjectLayer, ersätter dess innehåll med en PNG eller JPEG, uppdaterar lagret och sparar PSD och en förhandsgranskning.

// File: Program.cs
using System;
using System.IO;
using System.Linq;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Psd.Layers.SmartObjects;
using Aspose.PSD.ImageOptions;

class Program
{
    static void Main()
    {
        var inputPsd      = "template.psd";
        var replacement   = "replacement.png"; // any raster format supported by Aspose.PSD
        var outputPsd     = "output.psd";
        var outputPreview = "output-preview.png";

        if (!File.Exists(inputPsd) || !File.Exists(replacement))
        {
            Console.WriteLine("Missing input files.");
            return;
        }

        using (var psd = (PsdImage)Image.Load(inputPsd))
        {
            // Find the first smart object layer
            var smart = psd.Layers.OfType<SmartObjectLayer>().FirstOrDefault();
            if (smart == null)
            {
                Console.WriteLine("No smart object layer found in PSD.");
            }
            else
            {
                // Load the replacement raster and replace contents
                using var newContent = (RasterImage)Image.Load(replacement);

                // Replace embedded contents and update the smart object
                smart.ReplaceContents(newContent);
                smart.UpdateModifiedContent();
            }

            // Save updated PSD
            psd.Save(outputPsd);

            // Optional preview export
            psd.Save(outputPreview, new PngOptions());
        }

        Console.WriteLine("Done.");
    }
}

Anmärkning

  • ReplaceContents ersätter det inbyggda innehållet i det smarta objektet.
  • UpdateModifiedContent Uppfriskar lager rendering efter ersättning.
  • Spara en PNG-preview hjälper dig att validera resultatet utan att öppna Photoshop.

Ersätt ett smart objekt med lagernamn

Använd denna mönster när din mall har flera smarta objekt och du vill rikta ett specifikt objekt med displaynamn.

using System.Linq;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Psd.Layers.SmartObjects;

static void ReplaceByName(string psdPath, string layerName, string replacementPath, string outputPsd)
{
    using var psd = (PsdImage)Image.Load(psdPath);

    var smart = psd.Layers
                   .OfType<SmartObjectLayer>()
                   .FirstOrDefault(l => string.Equals(l.DisplayName, layerName, StringComparison.OrdinalIgnoreCase));

    if (smart == null)
        throw new InvalidOperationException($"Smart object layer '{layerName}' not found.");

    using var newContent = (RasterImage)Image.Load(replacementPath);

    smart.ReplaceContents(newContent);
    smart.UpdateModifiedContent();

    psd.Save(outputPsd);
}

Kalla det så här:

ReplaceByName("template.psd", "Product Image", "new-photo.jpg", "output.psd");

Ersätt alla smarta föremål i en PSD

Detta exempel går igenom alla smarta objektlagrar och ersätter var och en med samma bild. Du kan utöka det för att kartlägga varje smart objekt till en annan fil.

using System.Linq;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Psd.Layers.SmartObjects;

static void ReplaceAll(string psdPath, string replacementPath, string outputPsd)
{
    using var psd = (PsdImage)Image.Load(psdPath);
    using var newContent = (RasterImage)Image.Load(replacementPath);

    var smartLayers = psd.Layers.OfType<SmartObjectLayer>().ToList();
    if (smartLayers.Count == 0)
        throw new InvalidOperationException("No smart object layers found.");

    foreach (var smart in smartLayers)
    {
        smart.ReplaceContents(newContent);
        smart.UpdateModifiedContent();
    }

    psd.Save(outputPsd);
}

Hantera länkade smarta föremål

Om ett smart objekt är kopplat till en extern fil kan du ersätta länkmålet genom att indikera det på en ny bild på skivan. UpdateModifiedContent.

using System.Linq;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Psd.Layers.SmartObjects;

static void ReplaceLinked(string psdPath, string newLinkedFilePath, string outputPsd)
{
    using var psd = (PsdImage)Image.Load(psdPath);

    var linked = psd.Layers
                    .OfType<SmartObjectLayer>()
                    .FirstOrDefault(l => l.IsLinked);

    if (linked == null)
        throw new InvalidOperationException("No linked smart object layer found.");

    // Point the layer to a new external file
    linked.SetLinkedFile(newLinkedFilePath);

    // Refresh layer rendering
    linked.UpdateModifiedContent();

    psd.Save(outputPsd);
}

Anmärkning

  • Användning IsLinked att upptäcka länkade smarta föremål.
  • SetLinkedFile Uppdatera den yttre vägen som används av skiktet.
  • Den länkade filen måste vara ett stödjande rasterformat.

Bästa praxis

  • Bildstorlekar: För bästa kvalitet matchar ersättningsbildsaspektsförhållande och upplösning till de ursprungliga smarta objektgränserna.
  • Färghantering: Håll färgprofilerna konsekventa mellan mallar och ersättningstillgångar.
  • Batch automatisering: Återanvända en laddad RasterImage när flera lager ersätts för att minska I/O och minneskorn.
  • Validering: Exportera en PNG-preview efter ersättning för att bekräfta anpassning och skalning före distribution av PSD.
  • Fallbacks: Om ett dokument inte har smarta objekt, misslyckas snabbt med ett tydligt fel eller hoppar filen i batchläge.

Med dessa mönster kan du bygga pålitliga PSD-modelleringsrör som ersätter smarta objekt i skala och spara uppdaterade leveranser utan att öppna Photoshop.

More in this category