Menggunakan file PSD sebagai template untuk otomatisasi - Kasus Kartu Bisnis

Ikhtisar

Artikel ini menjelaskan kasus yang sering digunakan ketika Anda perlu memperbarui beberapa lapisan di File PSD secara otomatis, di mana file PSD/PSB memiliki struktur mirip template yang sudah dikenal. Hal ini dapat digunakan untuk membuat sejumlah besar Kartu Bisnis untuk orang yang berbeda (Kasus Kartu Bisnis). Atau Anda perlu menerjemahkan file PSD ke berbagai bahasa dengan penggantian beberapa materi grafis di dalamnya.

Setelah membaca artikel ini, Anda akan tahu bagaimana Anda dapat melakukan hal ini:

todo:image_alt_text

Kasus Sederhana

Sebagai contoh, Anda memiliki beberapa Template PSD dengan Nama Lapisan yang sudah dikenal. Jadi, Anda perlu mengubah, memperbarui, atau mengganti Lapisan PSD melalui C#. Pertama-tama, Anda perlu membuka file template dengan Aspose.PSD.

Bagaimana cara membuka File PSD via C#?

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

todo:image_alt_text

Kemudian kita perlu menemukan lapisan yang ingin kita ganti berdasarkan namanya. Berikut adalah implementasi sederhana untuk ini.

Bagaimana cara menemukan lapisan dalam file PSD berdasarkan namanya?

// 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;
}

Ketika lapisan sudah ditemukan, kita dapat memperbarui lapisan tersebut dengan cara biasa, menggunakan Grafik:

Bagaimana Cara Menggambar pada Grafik Lapisan 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)));
}

Dalam kasus ini, kita menggambar gambar PNG yang baru dimuat pada lapisan PSD yang ada, sehingga data lama akan hilang dalam file baru.

Tetapi bagaimana jika kita juga perlu memperbarui teks? Prosesnya akan serupa. Temukan Lapisan Teks berdasarkan namanya lalu kita secara programatik memperbarui Lapisan Teks dari File Photoshop tersebut.

Bagaimana cara memperbarui Lapisan Teks di Photoshop menggunakan 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");

Pada akhirnya, kita perlu menyimpan perubahan kita:

Bagaimana cara menyimpan file PSD yang telah diubah menggunakan Aspose.PSD

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

Gambar hasilnya:

todo:image_alt_text

Kasus Kompleks dengan fitur tambahan

Di atas kita menunjukkan cara paling sederhana untuk mengganti gambar dalam lapisan File PSD.

Namun, Aspose.PSD dapat menawarkan fitur tambahan yang lebih kompleks seperti menambahkan lapisan baru, menghapus lapisan lama, dan memperbarui lapisan teks dengan gaya berbeda pada teks multi-baris.

Kita dapat menemukan Lapisan yang ingin kita ganti, kemudian menemukan indeksnya dalam Daftar Lapisan, menghapusnya dan menyisipkan lapisan baru setelah diciptakan dari File Jpeg ke tempat yang sama.

Membuat lapisan baru dari file dan menyisipkannya ke Gambar PSD menggunakan 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();
}

Pada akhir file cuplikan kode ini, kita memperbaiki posisi lapisan dan menyimpan array Lapisan baru ke Gambar Psd.

Bagaimana cara menyalin properti Lapisan 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;
}

Dan setelah semua itu, kita perlu memperbarui lapisan teks dalam gambar PSD yang ada menggunakan C#. Aspose.PSD mendukung pembaruan TextLayer secara Portion. Setiap bagian teks memiliki kombinasi unik dari properti Gaya dan Paragraf.

Bagaimana cara menyalin properti Lapisan 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;
}

Sebagai hasilnya, kami telah mengubah template PSD melalui kode dengan lapisan baru dari file Jpeg, Png, J2k, Bmp, Gif, atau Tiff serta teks multi-baris dengan gaya berbeda pada setiap baris.

todo:image_alt_text