Автоматизирането на умния обект замяна ви помага да създадете вариации на същия шаблон на Photoshop с различни изображения. Aspose.PSD за .NET можете да зареждате PSD, да намерите умните слоеве на обекта, за да замените вграденото им съдържание с ново изображение и да запазите актуализирания документ.

Предупреждения

  • .NET 6 или по-късно
  • НУГЕТ : Aspose.PSD
dotnet add package Aspose.PSD

Замяна на първия интелигентен обект в 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 актуализиране на външния път, използван от слоя.
  • Свързаният файл трябва да бъде поддържан формат на растер.

Най-добрите практики

  • ** Размери на изображението**: За най-добро качество, съотношение и резолюция на външния аспект на снимката за заместване съответства на оригиналните граници на интелигентния обект.
  • Управление на цветовете: Поддържайте цветните профили последователни по шаблони и заместителни активи.
  • Batch автоматизация: Повторно използване на заредено RasterImage когато се заменят много слоеве, за да се намали I/O и паметта.
  • Валидация: Износ на PNG преглед след замяна, за да се потвърди съгласуваността и скалирането преди разпределянето на PSDs.
  • Fallbacks: Ако документът няма интелигентни обекти, бързо провали с ясна грешка или пропуснете файла в режим на комплект.

С тези модели можете да изградите надеждни PSD шаблони, които заменят интелигентни обекти по мащаб и да запазят актуализирани доставчици, без да отворите Photoshop.

More in this category