L’automatisation de remplacement d’objets intelligents vous aide à créer des variations du même modèle Photoshop avec des images différentes. Avec Aspose.PSD pour .NET vous pouvez charger un PSD, localiser les couches de objets inteligents, remplacer leur contenu intégré par une nouvelle image, et sauvegarder le document mis à jour. Les exemples suivants utilisent un code en ligne, courant qui se concentre sur les cas communs.
Principaux
- .NET 6 ou plus tard
- Nouveau :
Aspose.PSD
dotnet add package Aspose.PSD
Remplacer le premier objet intelligent dans un PSD
Cet exemple charge un PSD, trouve le premier SmartObjectLayer
, remplacera son contenu par un PNG ou JPEG, met à jour la couche et sauvegarde le PSD et un préview de pNG.
// 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.");
}
}
Notes
ReplaceContents
Il remplace le contenu intégré de l’objet intelligent.UpdateModifiedContent
Réfrigérer la couche rendue après le remplacement.- Économiser une prévision PNG vous aide à valider le résultat sans ouvrir Photoshop.
Remplacer un objet intelligent par un nom de couche
Utilisez ce modèle lorsque votre modèle a plusieurs objets intelligents et que vous voulez cibler un spécifique par le nom d’affichage.
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);
}
Appelez ça comme ça :
ReplaceByName("template.psd", "Product Image", "new-photo.jpg", "output.psd");
Remplacer tous les objets intelligents dans un PSD
Cet exemple traverse toutes les couches d’objets intelligents et les remplacera par la même image. Vous pouvez l’étendre pour cartographier chaque objet intelligent dans un fichier différent.
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);
}
Traiter des objets intelligents liés
Si un objet intelligent est lié à un fichier extérieur, vous pouvez remplacer l’objectif du lien en le pointant sur une nouvelle image sur le disque. 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);
}
Notes
- Utiliser
IsLinked
Détecter des objets intelligents liés. SetLinkedFile
Mise à jour de la voie extérieure utilisée par la couche.- Le fichier lié doit être un format raster soutenu.
Les meilleures pratiques
- Size d’image: Pour la meilleure qualité, correspond le ratio et la résolution de l’image de remplacement aux limites d’objets intelligents originaux.
- Gestion des couleurs: Gardez les profils de couleurs cohérents sur les modèles et les actifs de remplacement.
- Batch automation: réutiliser un chargé
RasterImage
Lorsque vous remplacez plusieurs couches pour réduire l’I/O et le churn de mémoire. - Validation: Exporter une prévision PNG après remplacement pour confirmer l’alignement et l’échelle avant la distribution des PSD.
- Fallbacks: Si un document n’a pas d’objets intelligents, échouer rapidement avec une erreur claire ou échapper au fichier dans le mode batch.
Avec ces modèles, vous pouvez construire des pipelines de modèle PSD fiables qui remplacent les objets intelligents à l’échelle et enregistrent des livraisons mises à jour sans ouvrir Photoshop.