Автоматизація розумного об’єкта допомагає вам створити варіанти того ж шаблону Photoshop з різними зображеннями. з Aspose.PSD для .NET ви можете завантажити PSD, локалізувати розумна об’єктні шари, замінити їх вбудований вміст новою картинкою і зберегти оновлений документ.
Передумови
- .NET 6 або більше
- Неймовірність :
Aspose.PSD
dotnet add package Aspose.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
оновлення зовнішнього шляху, який використовується шаром.- Зв’язаний файл повинен бути підтримуваним форматом растер.
Найкращі практики
- ** Розміри зображення**: Для кращого якості, відповідний відношення аспекту і розв’язання об’єкта заміни з оригінальними розумними межами.
- ** Управління кольором**: Зберігайте колірні профілі консистентним у шаблонах та активах заміни.
- Автоматизація батареї: повторне використання завантаженого
RasterImage
при заміні багатьох шарів для зменшення I/O і пам’яті. - Валідація: Експортуйте перегляд PNG після заміни для підтвердження збігу і масштабування перед розповсюдженням ПДС.
- Помилки: Якщо документ не має розумних об’єктів, швидко провалитися з чіткою помилкою або пропустити файл в режимі комплектування.
За допомогою цих шаблонів ви можете побудувати надійні трубопроводи PSD, які замінюють розумні об’єкти в масштабі і зберігають оновлені постачальники без відкриття Photoshop.