Akıllı nesne değiştirme otomatikleştirme farklı görüntülerle aynı Photoshop şablonu varyasyonlar oluşturmanıza yardımcı olur. Aspose.PSD ile .NET bir PSD yükleyebilir, akıllıca nesnelerin katmanlarını bulabilir, yerleşik içeriğini yeni bir görüntü ile değiştirebilir ve güncellenmiş belgeyi kaydedebilirsiniz.

Ön koşullar

  • .NET 6 veya sonraki
  • Nükleer : Aspose.PSD
dotnet add package Aspose.PSD

Bir PSD’de ilk akıllı nesneyi değiştirin

Bu örnek bir PSD yükler, ilk bulur SmartObjectLayer, içeriğini bir PNG veya JPEG ile değiştirir, katmanı güncelleştirir ve PSD’yi ve bir önizlemesini kaydeder.

// File: Program.cs
using System;
using System.IO;
using System.Linq;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Psd.Layers.SmartObjects;
using Aspose.PSD.ImageOptions;

class Program
{
    static void Main()
    {
        var inputPsd      = "template.psd";
        var replacement   = "replacement.png"; // any raster format supported by Aspose.PSD
        var outputPsd     = "output.psd";
        var outputPreview = "output-preview.png";

        if (!File.Exists(inputPsd) || !File.Exists(replacement))
        {
            Console.WriteLine("Missing input files.");
            return;
        }

        using (var psd = (PsdImage)Image.Load(inputPsd))
        {
            // Find the first smart object layer
            var smart = psd.Layers.OfType<SmartObjectLayer>().FirstOrDefault();
            if (smart == null)
            {
                Console.WriteLine("No smart object layer found in PSD.");
            }
            else
            {
                // Load the replacement raster and replace contents
                using var newContent = (RasterImage)Image.Load(replacement);

                // Replace embedded contents and update the smart object
                smart.ReplaceContents(newContent);
                smart.UpdateModifiedContent();
            }

            // Save updated PSD
            psd.Save(outputPsd);

            // Optional preview export
            psd.Save(outputPreview, new PngOptions());
        }

        Console.WriteLine("Done.");
    }
}

Notlar

  • ReplaceContents Akıllı nesnenin içeriğini değiştirir.
  • UpdateModifiedContent Değiştirildikten sonra yenileme yapılır.
  • Bir PNG önizlemesini kaydetmek, Photoshop’u açmadan sonucu doğrulamanıza yardımcı olur.

Akıllı bir nesneyi katman adı ile değiştirin

Şablonunuzun birden fazla akıllı nesneye sahip olduğunda bu örneği kullanın ve belirli birini görüntü adıyla hedeflemek istiyorsanız.

using System.Linq;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Psd.Layers.SmartObjects;

static void ReplaceByName(string psdPath, string layerName, string replacementPath, string outputPsd)
{
    using var psd = (PsdImage)Image.Load(psdPath);

    var smart = psd.Layers
                   .OfType<SmartObjectLayer>()
                   .FirstOrDefault(l => string.Equals(l.DisplayName, layerName, StringComparison.OrdinalIgnoreCase));

    if (smart == null)
        throw new InvalidOperationException($"Smart object layer '{layerName}' not found.");

    using var newContent = (RasterImage)Image.Load(replacementPath);

    smart.ReplaceContents(newContent);
    smart.UpdateModifiedContent();

    psd.Save(outputPsd);
}

Bunu bu şekilde çağırın:

ReplaceByName("template.psd", "Product Image", "new-photo.jpg", "output.psd");

Tüm akıllı nesnelerin bir PSD’de değiştirilmesi

Bu örnek tüm akıllı nesne katmanlarını dolaşır ve her birini aynı görüntü ile değiştirebilir.

using System.Linq;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Psd.Layers.SmartObjects;

static void ReplaceAll(string psdPath, string replacementPath, string outputPsd)
{
    using var psd = (PsdImage)Image.Load(psdPath);
    using var newContent = (RasterImage)Image.Load(replacementPath);

    var smartLayers = psd.Layers.OfType<SmartObjectLayer>().ToList();
    if (smartLayers.Count == 0)
        throw new InvalidOperationException("No smart object layers found.");

    foreach (var smart in smartLayers)
    {
        smart.ReplaceContents(newContent);
        smart.UpdateModifiedContent();
    }

    psd.Save(outputPsd);
}

Bağlantılı akıllı nesnelerin işlenmesi

Akıllı bir nesne dış bir dosyaya bağlanırsa, bağlantı hedefini diskteki yeni bir görüntüye işaretleyerek değiştirebilirsiniz. UpdateModifiedContent.

using System.Linq;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Psd.Layers.SmartObjects;

static void ReplaceLinked(string psdPath, string newLinkedFilePath, string outputPsd)
{
    using var psd = (PsdImage)Image.Load(psdPath);

    var linked = psd.Layers
                    .OfType<SmartObjectLayer>()
                    .FirstOrDefault(l => l.IsLinked);

    if (linked == null)
        throw new InvalidOperationException("No linked smart object layer found.");

    // Point the layer to a new external file
    linked.SetLinkedFile(newLinkedFilePath);

    // Refresh layer rendering
    linked.UpdateModifiedContent();

    psd.Save(outputPsd);
}

Notlar

  • Kullanımı IsLinked Bağlantılı akıllı nesneleri tespit etmek.
  • SetLinkedFile katman tarafından kullanılan dış yolu güncelleyin.
  • Bağlantılı dosya desteklenen bir raster biçimidir.

En iyi uygulamalar

  • ** Görüntü boyutları**: En iyi kalite için, değiştirme görüntü yönü oranı ve çözünürlüğü orijinal akıllı nesne sınırları ile eşleşir.
  • Renk yönetimi: Renk profilleri şablonlar ve yedek varlıklar arasında tutar.
  • Batch otomatikleştirme: yüklü bir yeniden kullanın RasterImage I/O ve hafıza kırışıklığı azaltmak için birçok katmanı değiştirirken.
  • Düzeltme: PSD’leri dağıtmadan önce düzeltmeyi ve ölçeklenmeyi doğrulamak için değiştirildikten sonra bir PNG önizlemesini ihraç edin.
  • Fallbacks: Bir belgenin akıllı nesneleri yoksa, açık bir hata ile hızlı bir şekilde başarısız olur veya dosyayı batch modunda kaydırır.

Bu modellerle, ölçekte akıllı nesneleri değiştiren ve Photoshop’u açmadan güncellenmiş teslimatları kaydetmek için güvenilir PSD şablonlama boruları oluşturabilirsiniz.

More in this category