اتوماسیون جایگزین کردن اشیاء هوشمند به شما کمک می کند تا تغییرات از همان قالب فتوشاپ با تصاویر مختلف ایجاد کنید. با Aspose.PSD برای .NET شما می توانید یک PSD بارگذاری کنید، لایه های شیء هوشمند را پیدا کنید ، محتوای انبدا شده خود را با یک تصویر جدید تعویض کنید و اسناد به روز شده را ذخیره کنید .
پیش شرط
- .NET 6 یا بیشتر
- نوکیا :
Aspose.PSD
dotnet add package Aspose.PSD
جایگزین کردن اولین شی هوشمند در یک PSD
این مثال یک PSD را بارگذاری می کند، اولین SmartObjectLayer
، محتوای آن را با یک PNG یا JPEG جایگزین می کند، لایه را به روز می سازد و PSD و یک پیش نمایش (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.");
}
}
یادداشت ها
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 ها صادر کنید.
- Fallbacks: اگر یک سند دارای اشیاء هوشمند نیست، با یک خطا آشکار به سرعت شکست می خورد یا فایل را در حالت بسته بندی از بین می برد.
با استفاده از این الگوهای شما می توانید لوله های قابل اعتماد PSD قالب سازی که جایگزین اشیاء هوشمند در مقیاس و ذخیره تحویل به روز بدون باز کردن Photoshop ایجاد کنید.