Автоматизирането на умния обект замяна ви помага да създадете вариации на същия шаблон на 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.