스마트 개체 교체를 자동화하면 다른 이미지와 동일한 Photoshop 템플릿의 변형을 만드는 데 도움이됩니다. Aspose.PSD for .NET를 사용하면 PSD를 충전하고, 스마트 객체 레이어를 찾고, 새 이미지로 내장된 콘텐츠를 대체하고 업데이트 된 문서를 저장할 수 있습니다.

원칙

  • .NET 6 또는 이후
  • 니게트 : Aspose.PSD
dotnet add package Aspose.PSD

첫 번째 똑똑한 개체를 PSD에서 대체하십시오.

이 예제는 PSD를 충전하고, 첫 번째를 찾습니다. SmartObjectLayer, 그것의 콘텐츠를 PNG 또는 JPEG로 대체하고, 레이어를 업데이트하고 PSD 및 사전 보기 PPG를 저장합니다.

// 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을 열지 않고 결과를 확인하는 데 도움이됩니다.

똑똑한 개체를 레이어 이름으로 대체하십시오.

이 패턴을 사용하면 템플릿에는 여러 개의 스마트 개체가 있으며 표시 이름으로 특정 하나를 타겟팅하고 싶습니다.

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 레이어에 의해 사용되는 외부 경로를 업데이트합니다.
  • 연결된 파일은 지원되는 라스터 형식이어야 합니다.

최고의 관행

  • ** 이미지 크기**: 최상의 품질을 위해, 교체 이미지 측면 비율과 원래의 스마트 개체 경계에 맞는 해상도.
  • 색상 관리: 색상 프로파일을 템플릿과 교체 자산에 따라 일관되게 유지합니다.
  • Batch 자동화: 다시 충전된 사용 RasterImage I/O 및 메모리 흐름을 줄이기 위해 여러 레이어를 교체 할 때.
  • 인증: PSD를 배포하기 전에 조정 및 스케일링을 확인하기 위해 교체 후 PNG 프리뷰를 수출합니다.
  • Fallbacks: 문서에 똑똑한 개체가 없으면 명확한 오류로 빠르게 실패하거나 파일을 배치 모드로 옮기십시오.

이러한 패턴을 사용하면 크기에 따라 스마트 개체를 대체하고 Photoshop을 열지 않고 업데이트 된 배달을 저장하는 신뢰할 수있는 PSD 템플릿 파이프를 구축 할 수 있습니다.

More in this category