Автоматизація розумного об’єкта допомагає вам створити варіанти того ж шаблону Photoshop з різними зображеннями. з Aspose.PSD для .NET ви можете завантажити PSD, локалізувати розумна об’єктні шари, замінити їх вбудований вміст новою картинкою і зберегти оновлений документ.

Передумови

  • .NET 6 або більше
  • Неймовірність : Aspose.PSD
dotnet add package Aspose.PSD

Замінити перший розумний об’єкт в PSD

Цей приклад завантажує ПСД, знаходить перший SmartObjectLayer, замінює його вміст PNG або JPEG, оновлює шар, а також зберігає PSD і попередній перегляд ПNG.

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

Зауваження

  • ReplaceContents замінює вбудований вміст розумного об’єкта.
  • UpdateModifiedContent Відновлюється рентген після заміни.
  • Збереження PNG перегляду допомагає вам завірити результат без відкриття Photoshop.

Замінити розумний об’єкт слоєм імені

Використовуйте цей шаблон, коли у вашій шаблоні є кілька розумних об’єктів, і ви хочете націлити на певний за назвою зображення.

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

Назвіть його таким чином:

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

Замінити всі розумні об’єкти в PSD

Цей приклад проходить через всі шари розумних об’єктів і замінює кожен з них одним і тим самим зображенням.

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

Використання інтелектуальних об’єктів

Якщо розумний об’єкт пов’язаний з зовнішнім файлом, ви можете замінити ціль зв’язку, вказуючи його на новий зображення на диску. 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);
}

Зауваження

  • Користувати IsLinked Виявлення зв’язаних розумних об’єктів.
  • SetLinkedFile оновлення зовнішнього шляху, який використовується шаром.
  • Зв’язаний файл повинен бути підтримуваним форматом растер.

Найкращі практики

  • ** Розміри зображення**: Для кращого якості, відповідний відношення аспекту і розв’язання об’єкта заміни з оригінальними розумними межами.
  • ** Управління кольором**: Зберігайте колірні профілі консистентним у шаблонах та активах заміни.
  • Автоматизація батареї: повторне використання завантаженого RasterImage при заміні багатьох шарів для зменшення I/O і пам’яті.
  • Валідація: Експортуйте перегляд PNG після заміни для підтвердження збігу і масштабування перед розповсюдженням ПДС.
  • Помилки: Якщо документ не має розумних об’єктів, швидко провалитися з чіткою помилкою або пропустити файл в режимі комплектування.

За допомогою цих шаблонів ви можете побудувати надійні трубопроводи PSD, які замінюють розумні об’єкти в масштабі і зберігають оновлені постачальники без відкриття Photoshop.

More in this category