Het automatiseren van slimme object vervanging helpt u om variaties van hetzelfde Photoshop-template met verschillende afbeeldingen te creëren. met Aspose.PSD voor .NET kunt u een PSD opladen, slime object lagen lokaliseren, hun ingebouwde inhoud vervangen door een nieuw beeld en het bijgewerkte document opslaan. De volgende voorbeelden gebruiken inline, runable code die zich richt op gewone gevallen.
Voorwaarden
- .NET 6 of later
- NuGet :
Aspose.PSD
dotnet add package Aspose.PSD
Vervang het eerste slimme object in een PSD
Dit voorbeeld loopt een PSD, vindt de eerste SmartObjectLayer
, vervangt zijn inhoud met een PNG of JPEG, bijgewerkt het laag, en bewaart de PSD en een voorbeeld van de 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.");
}
}
Opmerkingen
ReplaceContents
vervangt de ingebouwde inhoud van het slimme object.UpdateModifiedContent
Verfrissing van de layer rendering na vervanging.- Het opslaan van een PNG-voorbeeld helpt u het resultaat te valideren zonder Photoshop te openen.
Vervang een slimme object met laagnaam
Gebruik dit patroon wanneer uw template meerdere slimme objecten heeft en u een specifieke wilt richten op de naam van het display.
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);
}
Noem het zo:
ReplaceByName("template.psd", "Product Image", "new-photo.jpg", "output.psd");
Vervang alle slimme objecten in een PSD
Dit voorbeeld loopt door alle slagen van slimme objecten en vervangt elk met dezelfde afbeelding.
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);
}
Handelen met gekoppelde slimme objecten
Als een slimme object is gekoppeld aan een externe bestand, kunt u de linkdoel vervangen door het te wijzen op een nieuw beeld op de schijf. 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);
}
Opmerkingen
- Gebruik
IsLinked
om verbonden slimme objecten te detecteren. SetLinkedFile
update de externe route die door de laag wordt gebruikt.- De gekoppelde bestand moet een ondersteunde raster-formaat zijn.
Beste praktijken
- Bildgrootte: Voor de beste kwaliteit, overeenkomt vervangende afbeelding aspect ratio en resolutie met de oorspronkelijke slimme object grenzen.
- Kolorbeheer: Houd de kleurprofielen consistent in de templates en vervangende activa.
- Batch automatisering: hergebruik van een opgeladen
RasterImage
bij het vervangen van meerdere lagen om I/O en geheugenchurn te verminderen. - Validatie: Exporteer een PNG-preview na vervanging om aanpassing en scaling te bevestigen voor het distribueren van PSD’s.
- Fallbacks: Als een document geen slimme objecten heeft, mislukken ze snel met een duidelijke fout of schakelen ze het bestand in batch-modus.
Met deze patronen kunt u betrouwbare PSD-templatingpijpen bouwen die slimme objecten op schaal vervangen en bijgewerkte leveranciers opslaan zonder Photoshop te openen.