スマートオブジェクト交換の自動化は、異なる画像で同じPhotoshopテンプレートの変数を作成するのに役立ちます. Aspose.PSD for .NET を使用すると PSD をアップロードし、スムーズなオベクト層を位置付け、新しい画像に組み込まれたコンテンツを置き換え、更新されたドキュメントを保存することができます. 以下の例では、一般的なケースに焦点を当てたインラインで実行可能なコードを使用します。

原則

  • .NET 6 またはそれ以降
  • ニュージーランド: Aspose.PSD
dotnet add package Aspose.PSD

最初のスマートオブジェクトをPSDに置き換える

この例はPSDを積み重ね、最初の例を見つけます。 SmartObjectLayer, コンテンツを PNG または JPEG で置き換え、層を更新し、PSD とプレビュー PONG を保存します。

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

ノート

  • ReplaceContents スマートオブジェクトの内蔵コンテンツを置き換える。
  • UpdateModifiedContent 置き換えの後に放置する層を新鮮にします。
  • PNG プレビューを保存すると、Photoshop を開くことなく結果を確認できます。

スマートオブジェクトを層名で置き換える

このパターンを使用すると、テンプレートには複数のスマートオブジェクトがあり、ディスプレイ名によって特定の1つをターゲットにしたい。

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

このように呼びます:

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

すべてのスマートオブジェクトをPSDに置き換える

この例は、すべてのスマートオブジェクト層を通過し、それぞれ同じ画像で置き換えられます。

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

関連するスマートオブジェクトの処理

スマートオブジェクトが外部ファイルにリンクされている場合は、ディスク上の新しい画像に指定してリンクターゲットを置き換えることができます。 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);
}

ノート

  • 利用 IsLinked 関連するスマートオブジェクトを検出する。
  • SetLinkedFile 層によって使用される外部コースを更新します。
  • リンクされたファイルは、サポートされたラスター形式でなければなりません。

最良の実践

  • 画像サイズ:最良の品質のために、オリジナルのスマートオブジェクトの境界線に適合する代替画像の側面比率と解像度。
  • カラー管理: テンプレートおよび代替資産の範囲内で色のプロファイルを一貫して保持します。
  • バッチ自動化:再充電 RasterImage 複数の層を置き換えると、I/Oとメモリの周波数を減らす。
  • 認証: PSD を配布する前に調整およびスケールを確認するために交換後の PNG プレビューを輸出します。
  • Fallbacks: ドキュメントにスマートなオブジェクトがない場合は、明確なエラーで速く失敗したり、バッチモードでファイルを切り落としたりします。

これらのパターンでは、スマートオブジェクトをスケールで置き換える信頼性の高いPSDテンプレートパイプを構築し、Photoshopを開くことなく更新された送料を保存することができます。

More in this category