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.