استخدام ملفات PSD كقوالب للأتمتة - حالة بطاقات الأعمال

نظرة عامة

توضح هذه المقالة الحالات المستخدمة بشكل متكرر عند الحاجة لتحديث بعض الطبقات في ملف PSD بشكل برمجي، حيث يحتوي ملف PSD/PSB على هيكل يشبه القالب معروف. يمكن استخدام هذا من أجل إنشاء كمية كبيرة من بطاقات الأعمال لأشخاص مختلفين (حالة بطاقات الأعمال). أو إذا كنت بحاجة إلى ترجمة ملف PSD إلى لغات مختلفة مع استبدال بعض المواد البصرية فيه.

بعد قراءة هذه المقالة، ستعرف كيف يمكنك القيام بذلك:

todo:image_alt_text

حالة بسيطة

على سبيل المثال، لديك بعض القوالب PSD بأسماء الطبقات المعروفة. لذلك تحتاج إلى تغيير أو تحديث أو استبدال طبقة PSD عبر الـC#. أولاً، تحتاج إلى فتح ملف القالب باستخدام 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;
}

عند العثور على الطبقة، يمكننا تحديثها بالطريقة الشائعة، باستخدام Graphics:

كيفية الرسم على طبقة PSD بالـ Graphics

// 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#.

كيفية تحديث طبقة النص في فوتوشوب باستخدام 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.

كيفية نسخ خصائص الطبقة 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