استفاده از فایل‌های PSD به عنوان قالب‌ها برای اتوماسیون - مورد کارت‌های تجاری

مرور

این مقاله موارد استفاده‌شده اغلب را توضیح می‌دهد که کیش‌هایی روزآمد هستند که نیاز دارید تا برخی از لایه‌ها را به صورت برنامه‌نویسی در فایل PSD به‌روز کنید، جائی که فایل PSD/PSB یک ساختار مانند قالب شناخته‌شده دارد. این می‌تواند برای ایجاد تعداد زیادی از کارت‌های تجاری برای افراد مختلف استفاده شود (مورد کارت‌های تجاری). یا نیاز دارید که یک ترجمه از فایل PSD به زبان‌های مختلف با جایگزینی برخی از مطالب گرافیکی در آن ایجاد کنید.

بعد از خواندن این مقاله خواهید دانست که چگونه می‌توانید این کار را انجام دهید:

todo:image_alt_text

مورد ساده

به عنوان مثال، شما یک قالب PSD با نام‌های لایه‌های شناخته‌شده دارید. بنابراین شما نیاز دارید تا با استفاده از زبان C# لایه PSD را تغییر، به‌روز و یا جایگزین کنید. در ابتدا شما باید فایل قالب را با Aspose.PSD باز کنید.

چگونه فایل PSD را از طریق C# باز کنیم؟

// Let's load Image with Picture Frame
using (PsdImage image = (PsdImage)Image.Load(sourceFile))

todo:image_alt_text

سپس ما نیاز داریم تا یک لایه‌ای که می‌خواهیم با نام آن جایگزین کنیم بیابیم. در ادامه یک اجرای ساده برای این کار وجود دارد.

چگونه لایه را در فایل PSD بر اساس نام آن پیدا کنیم

// Using Layer Display Name you can find it in the PSD Image Layers List
private Layer FindLayerByName(PsdImage image, string name)
{
var layers = image.Layers;
foreach (var layer in layers)
{
if (string.Equals(layer.DisplayName, name, StringComparison.InvariantCultureIgnoreCase))
{
return layer;
}
}
return null;
}

هنگامی که لایه پیدا شود، می‌توانیم آن را به روش عمومی به‌روز کنیم، با استفاده از گرافیک:

چگونه بر روی لایه PSD گرافیک کشیم

// Let's find layer that we want to replace
var layerToReplace = FindLayerByName(image, "LayerToReplace");
var layers = new List<Layer>(image.Layers);
using (Stream stream = new FileStream(newLayerFile, FileMode.Open))
{
var newLayer = new Layer(stream);
// Drawing of new layer on the old
var graphic = new Graphics(layerToReplace);
graphic.Clear(Color.Empty);
graphic.DrawImage(newLayer, new Rectangle(new Point(), new Size(layerToReplace.Width, layerToReplace.Height)));
}

در این مورد، ما یک تصویر PNG جدید را بر روی لایه PSD وجودی کشیده‌ایم، بنابراین اطلاعات قدیمی در فایل جدید از بین می‌روند.

اما اگر نیز نیاز داریم تا متن را به‌روز کنیم؟ فرآیند مشابه خواهد بود. لایه متن را بر اساس نام آن پیدا کرده و سپس لایه متن را در فایل فتوشاپ به‌روز کنیم.

چگونه متن لایه را در فتوشاپ با استفاده از C# به‌روز کنیم

// We also can update text layers in PSD file. This can be used for business card create automation
var layerToUpdateText = (TextLayer)FindLayerByName(image, "Place the name of the picture here");
// Simple way to update text
layerToUpdateText.UpdateText("Louis le Grand Dauphin");

در انتها نیاز داریم تا تغییرات خود را ذخیره کنیم:

چگونه فایل PSD تغییر یافته را با استفاده از Aspose.PSD ذخیره کنیم

// Save PSD file
image.Save(outputFile);

تصویر نهایی:

todo:image_alt_text

مورد پیچیده‌تر با ویژگی‌های اضافی

در بالا ما روش ساده‌تری را برای جایگزینی تصویر در یک لایه از فایل PSD نشان دادیم.

اما Aspose.PSD می‌تواند ویژگی‌های اضافی پیچیده‌تری مانند اضافه کردن یک لایه جدید، حذف کردن لایه‌های قدیمی و به‌روزرسانی لایه متن با استفاده از استیل‌های مختلف در متن چند خطی ارائه دهد.

ما می‌توانیم لایهای که می‌خواهیم جایگزین کنیم را پیدا کنیم، سپس شاخص آن را در لیست لایه‌ها پیدا کرده، آن را حذف کرده و بعد از ایجاد آن از فایل Jpeg لایه جدید را در همان مکان قرار دهیم.

ایجاد یک لایه جدید از فایل و آن‌را به تصویر PSD با استفاده از Aspose.PSD وارد کنید

// Finding layer that we want to replace
var layerToReplace = FindLayerByName(image, "LayerToReplace");
var layers = new List<Layer>(image.Layers);
var indexOfLayer = layers.IndexOf(layerToReplace);
layers.Remove(layerToReplace);
using (Stream stream = new FileStream(newLayerFile, FileMode.Open))
{
var newLayer = new Layer(stream);
// We put new layer on the same coordinate and position in Layers as the removed layer
CopyLayerPosition(layerToReplace, newLayer);
layers.Insert(indexOfLayer, newLayer);
// Save list of changed layers
image.Layers = layers.ToArray();
}

به انتهای این قطعه کد فایل، ما موقعیت لایه را تصحیح می‌کنیم و آرایه لایه‌های جدید را به Psd Image ذخیره می‌کنیم.

چگونه ویژگی‌های لایه PsdImage را کپی کنیم

// Way to Copy Layer Coordinates in Aspose.PSD
void CopyLayerPosition(Layer from, Layer to)
{
to.Left = from.Left;
to.Top = from.Top;
to.Right = from.Right;
to.Bottom = from.Bottom;
}

و در پایان، ما نیاز داریم تا لایه‌های متنی در تصویر PSD موجود را به کمک C# به‌روز کنیم. Aspose.PSD از به‌روزرسانی لایه‌های متنی با بخش‌ها پشتیبانی می‌کند. هر بخش متنی ترکیبی منحصربه‌فرد از خصوصیت‌های استایل و پاراگراف را دارد.

چگونه ویژگی‌های لایه PsdImage را کپی کنیم

void UpdateTextLayer(PsdImage image)
{
// We also can update text layers in PSD file. This can be used for business card create automation
var layerToUpdateText = (TextLayer)FindLayerByName(image, "Place the name of the picture here");
// You can create comples text layers with different styles.
var textData = layerToUpdateText.TextData;
// We will use existing style of Text Layer to create new
var textPortion = textData.Items[0];
var defaultStyle = textPortion.Style;
var defaultParagraph = textPortion.Paragraph;
ITextPortion[] newPortions = textData.ProducePortions(
new string[] { "Louis XIV\r", "of France" },
defaultStyle,
defaultParagraph);
// Updating of default styles
newPortions[0].Style.FontSize = 24;
newPortions[0].Style.FillColor = Color.RoyalBlue;
newPortions[1].Style.Leading = 20;
// Removing old text
textData.RemovePortion(0);
// Addint new text portions
foreach (var newPortion in newPortions)
{
textData.AddPortion(newPortion);
}
// Applying text update
textData.UpdateLayerData();
// Fixes of the Layer position, because new text takes 2 rows
layerToUpdateText.Top = layerToUpdateText.Top - 10;
layerToUpdateText.Bottom = layerToUpdateText.Bottom - 10;
}

بنابراین، ما قالب PSD را از طریق کد با یک لایه جدید از فایل Jpeg، Png، J2k، Bmp، Gif، یا Tiff و یا متن چندخطی با استایل‌های مختلف در هر خط تغییر داده‌ایم.

todo:image_alt_text