Tự động hóa thay thế đối tượng thông minh giúp bạn tạo các biến thể của cùng một mẫu Photoshop với các hình ảnh khác nhau. Với Aspose.PSD cho .NET bạn có thể tải lên một PSD, tìm thấy lớp đối phẩm thông tin, thay đổi nội dung tích hợp của họ với một hình thức mới, và lưu tài liệu cập nhật. ví dụ sau đây sử dụng mã inline, chạy mà tập trung vào các trường hợp phổ biến.
Nguyên tắc
- .NET 6 hoặc hơn
- Nói :
Aspose.PSD
dotnet add package Aspose.PSD
Thay thế đối tượng thông minh đầu tiên trong PSD
Ví dụ này tải một PSD, tìm thấy người đầu tiên SmartObjectLayer
, thay thế nội dung của nó với một PNG hoặc JPEG, cập nhật lớp, và tiết kiệm PSD và một Preview P 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.");
}
}
Lưu ý
ReplaceContents
thay thế nội dung tích hợp của đối tượng thông minh.UpdateModifiedContent
Tải lại lớp phục hồi sau khi thay thế.- Tiết kiệm một PNG Preview giúp bạn xác nhận kết quả mà không cần mở Photoshop.
Thay thế một đối tượng thông minh bằng tên lớp
Sử dụng mô hình này khi mẫu của bạn có nhiều đối tượng thông minh và bạn muốn nhắm mục tiêu một cụ thể bằng tên hiển thị.
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ãy gọi nó như thế này:
ReplaceByName("template.psd", "Product Image", "new-photo.jpg", "output.psd");
Thay thế tất cả các đối tượng thông minh trong một PSD
Ví dụ này đi qua tất cả các lớp đối tượng thông minh và thay thế mỗi một với cùng một hình ảnh.
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);
}
Quản lý các đối tượng thông minh liên kết
Nếu một đối tượng thông minh được kết nối với một tệp bên ngoài, bạn có thể thay thế mục tiêu liên kết bằng cách chỉ nó cho một hình ảnh mới trên đĩa. 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);
}
Lưu ý
- Sử dụng
IsLinked
để phát hiện các đối tượng thông minh liên kết. SetLinkedFile
cập nhật con đường bên ngoài được sử dụng bởi lớp.- Tệp liên kết phải là một định dạng raster được hỗ trợ.
Thực hành tốt nhất
- Kích thước hình ảnh: Đối với chất lượng tốt nhất, phù hợp với tỷ lệ khía cạnh và độ phân giải của ảnh thay thế với giới hạn đối tượng thông minh ban đầu.
- ** Quản lý màu**: Giữ hồ sơ màu liên tục trên các mẫu và tài sản thay thế.
- Batch tự động hóa: Sử dụng lại một tải
RasterImage
khi thay thế nhiều lớp để giảm I/O và bộ nhớ churn. - Validation: Export a PNG preview after replacement to confirm alignment and scaling before distributing PSDs. (tạm dịch: Tính xác nhận)
- Fallbacks: Nếu tài liệu không có các đối tượng thông minh, nhanh chóng thất bại với một sai lầm rõ ràng hoặc rời bỏ tệp trong chế độ tập tin.
Với các mô hình này, bạn có thể xây dựng các ống định dạng PSD đáng tin cậy thay thế các đối tượng thông minh theo quy mô và tiết kiệm các khả năng giao hàng được cập nhật mà không cần mở Photoshop.