Automatizace inteligentní nahrazení objektů vám pomáhá vytvořit variace stejného Photoshop šablony s různými obrázky. Aspose.PSD pro .NET můžete načítat PSD, najít chytré objektové vrstvy, nahradit jejich vestavěný obsah novým obrázkem a uložit aktualizovaný dokument.

Předpoklady

  • .NET 6 nebo novější
  • V tomto případě: Aspose.PSD
dotnet add package Aspose.PSD

Náhrada prvního inteligentního objektu v PSD

Tento příklad nabírá PSD, najde první SmartObjectLayer, nahrazuje jeho obsah PNG nebo JPEG, aktualizuje vrstvu a ukládá PSD a předvídatelný 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.");
    }
}

Poznámky

  • ReplaceContents nahrazuje vestavěný obsah inteligentního objektu.
  • UpdateModifiedContent Odstraňuje vrstvu po náhradě.
  • Ušetření PNG předpovědi vám pomůže ověřit výsledek bez otevření Photoshopu.

Náhrada inteligentního objektu jménem vrstvy

Použijte tento vzorek, když má váš šablona více inteligentních objektů a chcete určité cílené jménem zobrazení.

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

Volejte to takto:

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

Nahradit všechny chytré objekty v PSD

Tento příklad prochází všemi vrstvami inteligentního objektu a nahrazuje každou z nich stejným obrázkem.Můžete jej rozšířit na mapování každého inteligenta do jiného souboru.

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

Související chytré objekty

Pokud je chytrý objekt připojen k externímu souboru, můžete nahradit cílový odkaz tím, že ho označíte za nový obrázek na disku. 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);
}

Poznámky

  • Použití IsLinked Zjišťovat propojené chytré objekty.
  • SetLinkedFile aktualizace vnější cesty používané vrstvou.
  • Přiložený soubor musí být podporovaným rasterovým formátem.

Nejlepší postupy

  • Velikosti obrazu: Pro nejlepší kvalitu odpovídá poměr a rozlišení prvotního chytrého objektu.
  • ** Barevný management**: Udržujte barevné profily konzistentní v rámci šablon a náhradních aktiv.
  • Batch automatizace: Opět použijte nabité RasterImage při nahrazení mnoha vrstv, aby se snížil I/O a paměť churn.
  • Validace: Exportujte předpověď PNG po náhradě, abyste potvrdili vyrovnání a skalování před distribucí PSD.
  • Fallbacks: Pokud dokument nemá chytré objekty, rychle selhání s jasnou chybou nebo vynechání souboru v režimu batch.

S těmito vzory můžete vytvořit spolehlivé PSD šablonovací potrubí, které nahradí chytré objekty na stupnici a uložíte aktualizované dodávky bez otevření Photoshopu.

More in this category