Az intelligens objektum cseréjének automatizálása segít abban, hogy ugyanazon Photoshop sablon különböző képekkel változásait hozzon létre. Aspose.PSD for .NET segítségével PSD-t tölthet fel, az okos tárgy rétegeit lokalizálhatja, beépített tartalmukat új képzel helyettesítheti, és megmentheti a frissített dokumentumot.
előfeltételek
- .NET 6 vagy újabb
- A NuGet:
Aspose.PSD
dotnet add package Aspose.PSD
Az első intelligens objektum helyettesítése a PSD-ben
Ez a példa feltölti a PSD-t, megtalálja az első SmartObjectLayer
, a tartalmát PNG vagy JPEG-vel helyettesíti, frissíti a réteget, és mentse a PSD-t és az előzetes megjelenítést.
// 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.");
}
}
Megjegyzések
ReplaceContents
helyettesíti az intelligens objektum beépített tartalmát.UpdateModifiedContent
A helyettesítés után frissíti a réteget.- A PNG előzetes megőrzése segít az eredmény érvényesítésében anélkül, hogy a Photoshopot megnyitná.
Egy okos objektum helyettesítése rétegnévvel
Használja ezt a mintát, ha a sablon több intelligens objektummal rendelkezik, és kijelzőnevén keresztül egy adott elemet szeretne célozni.
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);
}
Hívja ezt így:
ReplaceByName("template.psd", "Product Image", "new-photo.jpg", "output.psd");
Minden okos objektum helyettesítése egy PSD-ben
Ez a példa az összes okos objektum réteget áthalad, és helyettesíti mindegyikét ugyanazokkal a képekkel.
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);
}
Kapcsolódó intelligens tárgyak kezelése
Ha egy okos objektum egy külső fájlhoz van kötve, helyettesítheti a link célpontját a lemez új képére mutatva. 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);
}
Megjegyzések
- Használat
IsLinked
Kapcsolódó intelligens tárgyak felismerése. SetLinkedFile
frissíti a réteg által használt külső útvonalat.- A kapcsolódó fájlnak támogatott raster formátumnak kell lennie.
A legjobb gyakorlatok
- ** Képméretek**: A legjobb minőség érdekében a helyettesítő kép aspektus aránya és felbontása az eredeti intelligens objektum határaival.
- ** Színkezelés**: A színprofilok konzisztenciája a sablonokon és a helyettesítő eszközökön keresztül.
- Batch automatizálás: Újra használja a feltöltött
RasterImage
több réteg helyettesítése az I/O és a memóriakör csökkentése érdekében. - Validáció: Export egy PNG előzetes a helyettesítés után, hogy megerősítse a megfelelést és a skálázást a PSD-k elosztása előtt.
- Fallbacks: Ha egy dokumentum nem rendelkezik okos tárgyakkal, akkor egyértelmű hiba esetén gyorsan meghibásodik, vagy a fájlt csomagolási módban hagyja abba.
Ezekkel a mintákkal megbízható PSD szabványosító csöveket építhet, amelyek az okos objektumokat méretben helyettesítik, és frissített szállítmányokat menthetnek a Photoshop megnyitása nélkül.