Mengautomatikkan penggantian objek pintar membantu Anda membuat variasi dari template Photoshop yang sama dengan gambar yang berbeda. Dengan Aspose.PSD untuk .NET Anda dapat memuat PSD, menemukan lapisan objek cerdas, menggantikan konten tertanam mereka dengan imej baru, dan menyimpan dokumen yang diperbarui.
Persyaratan
- .NET 6 atau lebih baru
- Untuk NuGet:
Aspose.PSD
dotnet add package Aspose.PSD
Mengganti objek pintar pertama dalam PSD
Contoh ini memuat PSD, menemukan yang pertama SmartObjectLayer
, menggantikan kontennya dengan PNG atau JPEG, memperbarui lapisan, dan menyimpan PSD dan preview 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.");
}
}
Peringatan
ReplaceContents
menggantikan konten yang tertanam dari objek pintar.UpdateModifiedContent
Membersihkan lapisan rendering setelah penggantian.- Menyimpan preview PNG membantu Anda validasi hasil tanpa membuka Photoshop.
Mengganti objek pintar dengan nama lapisan
Gunakan pola ini ketika template Anda memiliki beberapa objek pintar dan Anda ingin menargetkan satu spesifik dengan nama tampilan.
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);
}
panggilnya seperti ini:
ReplaceByName("template.psd", "Product Image", "new-photo.jpg", "output.psd");
Mengganti semua objek pintar dalam PSD
Contoh ini mengalir melalui semua lapisan objek pintar dan menggantikan masing-masing dengan gambar yang sama. Anda dapat memperluasnya untuk memetakan setiap benda pintar ke file yang berbeda.
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);
}
Mengendalikan objek pintar yang terhubung
Jika objek pintar terhubung ke file eksternal, Anda dapat mengganti target link dengan menunjuknya pada gambar baru pada cakera. 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);
}
Peringatan
- Penggunaan
IsLinked
untuk mengidentifikasi objek pintar yang terhubung. SetLinkedFile
memperbarui jalur eksternal yang digunakan oleh lapisan.- File yang terhubung harus menjadi format raster yang didukung.
Praktik Terbaik
- ** Ukuran gambar**: Untuk kualitas terbaik, perbandingan aspek gambar penggantian dan resolusi sesuai dengan batas objek pintar asli.
- Pengurusan warna: Tetap profil warna konsisten di seluruh template dan aset penggantian.
- Batch Automation: Menggunakannya kembali
RasterImage
Ketika mengganti banyak lapisan untuk mengurangi I/O dan memori churn. - Validasi: Ekspor Preview PNG setelah penggantian untuk mengkonfirmasi penyelarasan dan skalan sebelum distribusi PSD.
- Fallbacks: Jika dokumen tidak memiliki objek pintar, gagal cepat dengan kesalahan yang jelas atau melepaskan file dalam mode batch.
Dengan corak ini, Anda dapat membangun pipa pemodelan PSD yang dapat diandalkan yang menggantikan objek pintar pada skala dan menyimpan leverables terkini tanpa membuka Photoshop.