Otomasyon için PSD dosyalarını şablon olarak kullanma - İş Kartları Örneği

Genel Bakış

Bu makale, PSD Dosyası içinde bazı bilinen şablon benzeri yapılara sahip olan katmanları programlı olarak güncellemeniz gerektiğinde sıkça kullanılan durumları anlatmaktadır. Bu, farklı insanlar için (İş Kartları Örneği için) birçok İş Kartı oluşturmak için veya PSD dosyasını farklı dillere çevirmeniz ve içindeki grafik materyallerini değiştirmeniz gerektiğinde kullanılabilir.

Bu makaleyi okuduktan sonra şunları nasıl yapabileceğinizi öğreneceksiniz:

yapılacak:resim_alternatif_metin

Basit bir durum

Örneğin, bilinen Katman Adlarına sahip bazı PSD Şablonunuz var. Bu yüzden C# aracılığıyla PSD Katmanını değiştirmeniz, güncellemeniz veya değiştirmeniz gerekiyor. İlk olarak, Aspose.PSD ile şablon dosyasını açmanız gerekmektedir.

PSD Dosyasını C# ile nasıl açarsınız?

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

yapılacak:resim_alternatif_metin

Daha sonra değiştirmek istediğimiz bir katmanı adına göre bulmamız gerekmektedir. İşte bu için basit bir uygulama örneği.

PSD dosyasındaki katmanı adına göre nasıl bulabiliriz

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

Katman bulunduğunda, grafikleri kullanarak genel bir şekilde güncelleyebiliriz, Graphics kullanarak:

PSD katmanında Grafik çizme

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

Bu durumda, yeni bir PNG resmi yükleyerek mevcut PSD katmanına çizim yaparız, böylece eski veriler yeni dosyada kaybolur.

Ancak metni de güncellememiz gerekiyorsa ne yapacağız? Süreç benzer olacaktır. Metin Katmanını adına göre bulun, ardından Photoshop Dosyasının metin katmanını programlı olarak güncelleyin .

Metin Katmanını C# ile Photoshop’ta nasıl güncelleyebiliriz

// 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");

Son olarak değişikliklerimizi kaydetmemiz gerekmektedir:

Değiştirilmiş PSD dosyasını Aspose.PSD kullanarak nasıl kaydedebiliriz

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

Sonuç resim:

yapılacak:resim_alternatif_metin

Ek özelliklerle karmaşık bir durum

Yukarıda, PSD Dosyasının bir katmanındaki resmi değiştirmenin en basit yolunu gösterdik.

Ancak Aspose.PSD, yeni bir katman eklemenin, eski katmanları kaldırmanın ve çoklu satırlı metinde farklı stiller kullanarak metin katmanını güncellemenin gibi daha karmaşık ek özellikler sunabilir.

Değiştirmek istediğimiz Katmanı buluyoruz, ardından Katmanlar Listesindeki indeksini buluyoruz, onu kaldırıyoruz ve aynı yere Jpeg Dosyasından oluşturduktan sonra yeni bir Katman ekliyoruz.

Dosyadan yeni bir katman oluşturup onu Aspose.PSD kullanarak PSD Görüntüsüne eklemek

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

Bu dosya kod parçacığının sonunda, katman pozisyonunu düzeltiyoruz ve yeni Katman dizisini Psd Görüntüsüne kaydediyoruz.

PsdImage Katman özelliklerini kopyalamanın yolu

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

Ve en önemlisi, mevcut PSD görüntüsündeki metin katmanlarını C# ile güncellememiz gerekmektedir. Aspose.PSD, Metin Katmanını Satırlar Halinde Güncelleme konusunda destek verir. Her metin parçasının benzersiz bir Stil ve Paragraf özellikleri kombinasyonu vardır.

PsdImage Katman özelliklerini kopyalamanın yolu

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

Sonuç olarak, Jpeg, Png, J2k, Bmp, Gif veya Tiff dosyasından yeni bir Katmanla PSD şablonunu kod aracılığıyla değiştirdik ve her satırda farklı stillerde çoklu satırlı metin güncelledik.

yapılacak:resim_alternatif_metin