Automatyzacja inteligentnej wymiany obiektów pomaga tworzyć warianty tego samego szablonu Photoshop z różnymi obrazami. z Aspose.PSD dla .NET można pobrać PSD, znaleźć smart warstwy obiektu, zastąpić ich wbudowane treści nowym obrazem i zapisać aktualizowany dokument.
Warunki
- .NET 6 lub później
- W Nowym Jorku:
Aspose.PSD
dotnet add package Aspose.PSD
Zastąpić pierwszy inteligentny obiekt w PSD
Przykład ten ładuje PSD, znajduje się pierwszy SmartObjectLayer
, zastępuje zawartość za pomocą PNG lub JPEG, aktualizuje warstwę, a także oszczędza PSD i przewidywaną 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.");
}
}
notatki
ReplaceContents
zastępuje wbudowany treść inteligentnego obiektu.UpdateModifiedContent
Odświeża warstwę renderowania po zastąpieniu.- Oszczędzanie przeglądu PNG pomaga zweryfikować wynik bez otwarcia programu Photoshop.
Zastąpić inteligentny obiekt nazwą warstwy
Użyj tego wzorca, gdy Twój szablon ma kilka inteligentnych obiektów i chcesz ukierunkować konkretny jeden na nazwę wyświetlacza.
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);
}
Zadzwoń do niego tak:
ReplaceByName("template.psd", "Product Image", "new-photo.jpg", "output.psd");
Zastąpić wszystkie inteligentne obiekty w PSD
Ten przykład przepływa przez wszystkie warstwy inteligentnych obiektów i zastępuje je tym samym obrazem.
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);
}
Zarządzanie połączonymi inteligentnymi obiektami
Jeśli inteligentny obiekt jest połączony z zewnętrznym plikiem, możesz zastąpić cel link, wskazując go na nowy obraz na dysku. 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);
}
notatki
- Używanie
IsLinked
Wykrywanie powiązanych inteligentnych obiektów. SetLinkedFile
aktualizuje zewnętrzną ścieżkę stosowaną przez warstwę.- Połączony plik musi być obsługiwany w formacie raster.
Najlepsze praktyki
- ** Rozmiary obrazu**: Dla najlepszej jakości, odpowiedni stosunek i rozdzielczość aspektu zdjęcia zastępczego do oryginalnych inteligentnych granic obiektu.
- ** Zarządzanie kolorami**: Utrzymuj spójne profile kolorów w szablonach i aktywach zastępczych.
- Batch automatyzacja: ponowne używanie ładowanego
RasterImage
przy zastąpieniu wielu warstw w celu zmniejszenia I/O i pamięci. - Validacja: Exportuj przegląd PNG po zastąpieniu, aby potwierdzić dopasowanie i skalowanie przed dystrybucją PSD.
- Powtórki: Jeśli dokument nie ma inteligentnych obiektów, szybko się nie uda z wyraźnym błędem lub przejdź do pliku w trybie zestawu.
Dzięki tym wzorom można zbudować niezawodne rury szablonowe PSD, które zastępują inteligentne obiekty na skalę i przechowują aktualizowane dostawy bez otwarcia programu Photoshop.