Automatisering af smart objekt udskiftning hjælper dig med at skabe variationer af samme Photoshop-templet med forskellige billeder. Med Aspose.PSD for .NET kan du oplade en PSD, finde intelligente objektlag, erstatte deres indbyggede indhold med et nyt billede, og gemme det opdaterede dokument.

Forudsætninger

  • .NET 6 eller senere
  • Det er nu: Aspose.PSD
dotnet add package Aspose.PSD

Udskift det første intelligente objekt i en PSD

Dette eksempel lader en PSD, finder den første SmartObjectLayer, erstatter dens indhold med en PNG eller JPEG, opdaterer lagret, og gemmer PSD og en forudsigelse pNG.

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

Noter

  • ReplaceContents erstatter det indbyggede indhold af det smarte objekt.
  • UpdateModifiedContent Fresker skærmen efter udskiftning.
  • Spare en PNG forudsigelse hjælper dig med at validere resultatet uden at åbne Photoshop.

Udskift et smart objekt med et lagernavne

Brug denne mønster, når din maler har flere smarte objekter, og du ønsker at målrette en bestemt med displaynavnet.

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

kald det sådan:

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

Udskift alle smarte objekter i en PSD

Dette eksempel løber gennem alle smarte objekter og erstattes hver af dem med det samme billede. Du kan udvide det til at kartlægge hvert smart objekt til en anden 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);
}

Håndtering af forbundet smarte objekter

Hvis et smart objekt er knyttet til en ekstern fil, kan du erstatte linkmålet ved at indikere det til et nyt billede på disken. 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);
}

Noter

  • Brug af IsLinked Detekterer forbundet smarte objekter.
  • SetLinkedFile opdaterer den ydre vej, der anvendes af lageren.
  • Den linkede fil skal være et støttet rasterformat.

Bedste praksis

  • Bildstørrelser: For den bedste kvalitet, matcher udskiftning af billede aspektforhold og opløsning til de oprindelige smarte objekter.
  • Color Management: Hold farveprofiler konsekvent over templates og udskiftningsforretninger.
  • Batch automatisering: genanvendelse af en opladet RasterImage Ved at erstatte mange lag for at reducere I/O og hukommelseskærm.
  • Validering: Eksporterer en PNG-preview efter udskiftning for at bekræfte tilpasning og skalering før distribution af PSD’er.
  • Fallbacks: Hvis et dokument ikke har smarte objekter, mislykkes hurtigt med en klar fejl eller skifter filen i batch-modus.

Med disse mønstre kan du opbygge pålidelige PSD-moduleringsrør, der erstatte smarte objekter i skalaen og gemme opdaterede levererbarheder uden at åbne Photoshop.

More in this category