การอัตโนมัติการแทนที่วัตถุสมาร์ทช่วยให้คุณสร้างรูปแบบของรูปแบบ Photoshop เดียวกันกับภาพที่แตกต่างกัน ด้วย Aspose.PSD สําหรับ .NET คุณสามารถโหลด PSD, ค้นหา layers สัญชาตญาณ, เปลี่ยนเนื้อหาที่รวมไว้ด้วยภาพใหม่และบันทึกเอกสารที่อัพเดท ตัวอย่างต่อไปนี้ใช้รหัสแบบอินไลน์ที่สามารถทํางานได้ซึ่งมุ่งเน้นไปที่กรณีทั่วไป
ข้อกําหนด
- .NET 6 หรือเร็วกว่า
- หมายเลข:
Aspose.PSD
dotnet add package Aspose.PSD
เปลี่ยนวัตถุสมาร์ทครั้งแรกใน PSD
ตัวอย่างนี้โหลด PSD, ค้นหาครั้งแรก SmartObjectLayer
, เปลี่ยนเนื้อหาของมันด้วย PNG หรือ JPEG, ปรับปรุงชั้นและบันทึก PSD และ 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.");
}
}
การแจ้งเตือน
ReplaceContents
เปลี่ยนเนื้อหาที่รวมของวัตถุสมาร์ทUpdateModifiedContent
การฟื้นฟู layer rendering หลังจากเปลี่ยน- การบันทึก PNG Preview ช่วยให้คุณยืนยันผลโดยไม่ต้องเปิด Photoshop
เปลี่ยนวัตถุที่สมาร์ทด้วยชื่อชั้น
ใช้รูปแบบนี้เมื่อ template ของคุณมีหลายวัตถุสมาร์ทและคุณต้องการเป้าหมายหนึ่งโดยชื่อแสดง
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
ปรับปรุงเส้นทางภายนอกที่ใช้โดยชั้น- ไฟล์ที่เชื่อมโยงจะต้องเป็นรูปแบบ raster ที่ได้รับการสนับสนุน
การปฏิบัติที่ดีที่สุด
- ขนาดภาพ: สําหรับคุณภาพดีที่สุดความสัมพันธ์และความละเอียดของภาพการแทนที่ตรงกับข้อ จํากัด ของวัตถุสมาร์ทเดิม
- การจัดการสี: حفظโปรไฟล์สีอย่างสม่ําเสมอในรูปแบบและสินทรัพย์การแทนที่
- อัตโนมัติแบทช์: ใช้ใหม่โหลด
RasterImage
เมื่อเปลี่ยนหลายชั้นเพื่อลด I / O และหน่วยความจํา - การรับรอง: การส่งออกการตรวจสอบ PNG หลังจากเปลี่ยนเพื่อยืนยันการปรับและสแกนก่อนการกระจาย PSDs
- ข้อบกพร่อง: หากเอกสารไม่มีวัตถุที่ชาญฉลาดล้มเหลวอย่างรวดเร็วด้วยข้อผิดพลาดที่ชัดเจนหรือลบไฟล์ในโหมดชุด
ด้วยรูปแบบเหล่านี้คุณสามารถสร้างท่อแบบจําลอง PSD ที่เชื่อถือได้ที่จะแทนที่วัตถุสมาร์ทตามขนาดและบันทึกการจัดส่งที่ปรับปรุงโดยไม่ต้องเปิด Photoshop