Automatizarea înlocuirii de obiecte inteligente vă ajută să creați variații ale aceluiași șablon Photoshop cu imagini diferite. Aspose.PSD pentru .NET vă permite să încărcați un PSD, să găsiți straturile de obiect inteligent, sa le inlocuiți conținutul cu o nouă imagine și să salvați documentul actualizat.

Prevederile

  • .NET 6 sau mai târziu
  • Încă nu: Aspose.PSD
dotnet add package Aspose.PSD

Înlocuiește primul obiect inteligent într-un PSD

Acest exemplu încărcă un PSD, găsește primul SmartObjectLayer, înlocuiește conținutul cu un PNG sau JPEG, actualizează stratul și salvează PSD și un preview PONG.

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

Notă

  • ReplaceContents Înlocuiește conținutul integrat al obiectului inteligent.
  • UpdateModifiedContent Reînnoiește stratul de renderare după înlocuire.
  • Salvarea unui preview PNG vă ajută să validați rezultatul fără a deschide Photoshop.

Înlocuiește un obiect inteligent cu un nume de strat

Utilizați acest model atunci când șablonul dvs. are mai multe obiecte inteligente și doriți să țineți unul specific prin numele de afișare.

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

Luați-o așa cum este:

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

Înlocuiește toate obiectele inteligente într-un PSD

Acest exemplu trece prin toate straturile de obiecte inteligente și înlocuiește fiecare cu aceeași imagine.

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

Tratarea obiectelor inteligente conectate

Dacă un obiect inteligent este conectat la un fișier extern, puteți înlocui ținta de legătură indicând-o la o nouă imagine pe disc. 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);
}

Notă

  • Utilizarea IsLinked pentru a detecta obiecte inteligente conectate.
  • SetLinkedFile actualizarea căii externe utilizate de strat.
  • Fișierul legat trebuie să fie un format raster susținut.

Cele mai bune practici

  • ** Dimensiuni de imagine**: Pentru cea mai bună calitate, se potrivește raportul aspectului imaginii de înlocuire și rezoluția cu limitele obiectului inteligent original.
  • Gestionarea culorilor: păstrați profilurile de culori în mod coerent în toate modelele și activele de înlocuire.
  • Automatizare batch: Reutilizarea unui încărcat RasterImage atunci când înlocuiți mai multe straturi pentru a reduce I/O și memorie churn.
  • Validație: Exportați un preaviz PNG după înlocuire pentru a confirma alinierea și scalarea înainte de distribuirea PSD-urilor.
  • Fallbacks: Dacă un document nu are obiecte inteligente, eșuați rapid cu o eroare clară sau treceți fișierul în modul batch.

Cu aceste modele puteți construi tuburi de modelare PSD fiabile care înlocuiesc obiecte inteligente la scară și salvează livrări actualizate fără a deschide Photoshop.

More in this category