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:
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)) |
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:
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.