O filtro Displace é uma das ferramentas de distorção mais úteis do Photoshop. Ele deforma os pixels de uma camada de acordo com os valores de brilho de um mapa de deslocamento separado, que é como os designers envolvem arte em dobras de tecido, adicionam efeitos de ondulação ou ajustam logotipos em superfícies texturizadas. Quando esse filtro é aplicado como um filtro inteligente, suas configurações ficam dentro do arquivo PSD e permanecem totalmente editáveis. Este artigo mostra como ler e gravar dados do filtro inteligente Displace em C#. Você adicionará um filtro inteligente Displace a uma camada de Objeto Inteligente, configurará suas opções de escala e tratamento de bordas, incorporará o mapa de deslocamento, salvará o PSD e, em seguida, lerá as configurações do filtro para verificar a ida e volta — tudo sem o Adobe Photoshop instalado.
Principais Conclusões
- A classe
DisplaceSmartFilter, disponível no Aspose.PSD for .NET 26.8 e posteriores, expõe o filtro Displace do Photoshop como um objeto .NET tipado fortemente. - A escala horizontal e vertical, o método de deslocamento (
TileouStretch) e o tratamento de áreas indefinidas (WrapAroundouRepeatEdgePixels) são todas propriedades simples de leitura/gravação. - O mapa de deslocamento pode ser incorporado ao PSD de saída passando
trueao construtor, o que mantém o arquivo autônomo e portátil. SmartFilters.UpdateResourceValues()deve ser chamado após alterar a coleção de filtros, caso contrário as alterações não serão salvas.- A mesma API lê os dados do filtro de volta a partir de arquivos PSD existentes, o que a torna adequada para validação, auditoria e processamento em lote.
Por que o Filtro Inteligente Displace Importa
Os pipelines de automação de design frequentemente precisam reproduzir efeitos do Photoshop em escala. Exemplos típicos incluem gerar mockups de produtos onde um design impresso segue as dobras de uma camiseta, produzir variações de modelos para equipes de marketing ou auditar uma biblioteca de modelos PSD para confirmar que cada arquivo usa as mesmas configurações do filtro.
Fazer isso manualmente no Photoshop não escala, e achatar o efeito em pixels faz com que se perca a capacidade de editá‑lo posteriormente. Ao ler e gravar os dados do filtro inteligente Displace em C#, você mantém o filtro não destrutivo e editável no Photoshop, enquanto o controla a partir de código do lado do servidor, trabalhos em segundo plano ou ferramentas de desktop.
Usando Aspose.PSD para leitura e gravação de dados de filtro inteligente Displace
Aspose.PSD for .NET permite que desenvolvedores C# leiam e escrevam dados do filtro inteligente Displace diretamente através da classe DisplaceSmartFilter.
Introdução
Instale o Aspose.PSD NuGet package (versão 26.8 ou posterior) a partir do Console do Gerenciador de Pacotes:
Install-Package Aspose.PSD
Ou use a CLI do .NET:
dotnet add package Aspose.PSD
Os exemplos abaixo utilizam os seguintes namespaces:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Psd.Layers.SmartFilters;
using Aspose.PSD.FileFormats.Psd.Layers.SmartObjects;
Você também precisará de dois arquivos de entrada: um PSD que contenha pelo menos uma camada de Smart Object e um PSD para usar como mapa de deslocamento. Para detalhes da API, veja a Aspose.PSD for .NET documentation e o guia de filtros inteligentes.
Propriedades do DisplaceSmartFilter em um Relance
| Property | Type | Purpose |
|---|---|---|
HorizontalScale | double | Escala de deslocamento horizontal, como na caixa de diálogo Displace do Photoshop |
VerticalScale | double | Escala de deslocamento vertical |
DisplacementMethod | DisplacementMethod | Tile repete o mapa; Stretch redimensiona o mapa para caber na camada |
UndefinedAreas | UndefinedAreas | WrapAround ou RepeatEdgePixels para pixels deslocados fora da camada |
IsDisplacementMapEmbedded | bool | Indica se o mapa está incorporado no PSD |
DisplaceMapData | — | Os dados do mapa de deslocamento incorporado |
DisplacementMapPath | string | O caminho do mapa de deslocamento |
Como Adicionar um Filtro Inteligente Displace em C#
O primeiro passo é carregar um PSD que contém uma camada de Objeto Inteligente. Em seguida, você cria um DisplaceSmartFilter, configura suas propriedades, adiciona‑o à coleção de filtros inteligentes da camada e salva o resultado.
O exemplo C# a seguir adiciona e configura um filtro inteligente Displace em uma camada de Objeto Inteligente.
string baseFolder = "Data";
string outputFolder = "Output";
Directory.CreateDirectory(outputFolder);
string sourceFile = Path.Combine(baseFolder, "no_displace_filter.psd");
string displaceMapPath = Path.Combine(baseFolder, "displace_map.psd");
string outputFile = Path.Combine(outputFolder, "output_displace_filter.psd");
// Load the source PSD file.
using (PsdImage image = (PsdImage)Image.Load(sourceFile))
{
// Find the first Smart Object layer instead of relying on a hard-coded index.
SmartObjectLayer smartObj = image.Layers.OfType<SmartObjectLayer>().FirstOrDefault()
?? throw new InvalidOperationException("The source PSD has no Smart Object layer.");
// Create the filter. The second argument embeds the displacement map in the output PSD.
DisplaceSmartFilter displace = new DisplaceSmartFilter(displaceMapPath, true)
{
HorizontalScale = 12.5,
VerticalScale = 15.0,
DisplacementMethod = DisplacementMethod.Tile,
UndefinedAreas = UndefinedAreas.WrapAround
};
// Filters is exposed as an array, so copy it to a list, append the new filter,
// and assign the updated array back to the collection.
List<SmartFilter> filters = new List<SmartFilter>(smartObj.SmartFilters.Filters);
filters.Add(displace);
smartObj.SmartFilters.Filters = filters.ToArray();
// Write the updated filter collection into the Smart Object layer's resources.
smartObj.SmartFilters.UpdateResourceValues();
// Save the modified PSD.
image.Save(outputFile);
}
Explicação
- Carregando o PSD –
Image.Loadretorna umImagegenérico, que é convertido paraPsdImagepara acessar recursos específicos do PSD, como camadas e filtros inteligentes. - Encontrando a camada de Smart Object –
OfType<SmartObjectLayer>()seleciona a primeira camada de Smart Object e falha com uma mensagem clara se nenhuma existir. Isso é mais seguro do que indexar diretamente emLayers, pois a ordem das camadas varia entre arquivos. - Criando o filtro – O construtor
DisplaceSmartFilter(string, bool)recebe o caminho do mapa de deslocamento e uma bandeira que controla se o mapa é incorporado. Passartruetorna o PSD de saída autônomo. - Configurando o filtro –
HorizontalScaleeVerticalScaledefinem a intensidade do deslocamento.DisplacementMethod.Tilerepete o mapa ao longo da camada, enquantoStretchredimensiona para caber.UndefinedAreas.WrapAroundpreenche os pixels deslocados fora da tela com conteúdo da borda oposta;RepeatEdgePixelsestende as cores da borda. - Atualizando a coleção –
SmartFilters.Filtersé exposto como um array. Copiá-lo para umList<SmartFilter>, adicionar o novo filtro e atribuirToArray()de volta preserva quaisquer filtros inteligentes que já estavam na camada. - Persistindo as alterações –
UpdateResourceValues()grava a coleção de filtros nos recursos PSD da camada. Pular esta chamada faz com que o novo filtro seja perdido ao salvar. - Salvando –
image.Save(outputFile)grava o PSD atualizado no disco.
Como Ler Dados do Filtro Inteligente Displace em C#
Depois de salvar o PSD, você pode recarregá‑lo e inspecionar as propriedades do filtro para confirmar que cada valor foi persistido corretamente. A mesma abordagem funciona para arquivos PSD criados no Photoshop.
O exemplo C# a seguir lê o filtro inteligente Displace e valida suas configurações.
using (PsdImage image = (PsdImage)Image.Load(outputFile))
{
SmartObjectLayer smartObj = image.Layers.OfType<SmartObjectLayer>().FirstOrDefault()
?? throw new InvalidOperationException("The PSD has no Smart Object layer.");
// Search by type instead of position, so other smart filters on the layer are ignored.
DisplaceSmartFilter displace = smartObj.SmartFilters.Filters
.OfType<DisplaceSmartFilter>()
.LastOrDefault()
?? throw new InvalidOperationException("No Displace smart filter found on the layer.");
Console.WriteLine($"Horizontal scale: {displace.HorizontalScale}");
Console.WriteLine($"Vertical scale: {displace.VerticalScale}");
Console.WriteLine($"Method: {displace.DisplacementMethod}");
Console.WriteLine($"Undefined areas: {displace.UndefinedAreas}");
Console.WriteLine($"Map embedded: {displace.IsDisplacementMapEmbedded}");
// Verify that the saved values match the values written earlier.
AssertAreEqual(12.5, displace.HorizontalScale);
AssertAreEqual(15.0, displace.VerticalScale);
AssertAreEqual(DisplacementMethod.Tile, displace.DisplacementMethod);
AssertAreEqual(UndefinedAreas.WrapAround, displace.UndefinedAreas);
AssertAreEqual(true, displace.IsDisplacementMapEmbedded);
AssertAreEqual(true, displace.DisplaceMapData != null);
}
static void AssertAreEqual(object expected, object actual, string message = null)
{
if (!object.Equals(expected, actual))
{
throw new Exception(message ?? $"Expected {expected}, but got {actual}.");
}
}
Explicação
- Recarregando o arquivo –
Image.Loadabre o PSD salvo na etapa anterior. - Localizando a camada Smart Object – A mesma pesquisa baseada em tipo mantém as etapas de leitura e gravação consistentes.
- Encontrando o filtro por tipo –
OfType<DisplaceSmartFilter>().LastOrDefault()retorna o filtro Displace adicionado mais recentemente e nunca produz um cast inválido. Isso é mais confiável do que ler o último elemento do array e fazer cast comas, que silenciosamente retornanullse um filtro diferente estiver nessa posição. - Lendo propriedades – Todas as configurações do filtro estão disponíveis como propriedades tipadas, podendo ser registradas, comparadas ou exportadas para um relatório.
- Validação – O helper
AssertAreEqualcompara os valores persistidos com os valores originais e lança uma exceção com uma mensagem descritiva em caso de divergência.
Conclusão
Com a classe DisplaceSmartFilter no Aspose.PSD for .NET, desenvolvedores C# podem adicionar, configurar, salvar e ler novamente filtros inteligentes Displace do Photoshop inteiramente em código. O filtro permanece não destrutivo e editável no Photoshop, o mapa de deslocamento pode viajar dentro do PSD, e a mesma API suporta validação de ida e volta. Isso torna simples a construção de geradores de mockup, pipelines de modelo e ferramentas de auditoria de PSD sobre .NET.
FAQs
Qual versão do Aspose.PSD for .NET suporta o filtro inteligente Displace? A leitura e gravação de dados do filtro inteligente Displace foi introduzida no Aspose.PSD for .NET 26.8. Use a versão 26.8 ou posterior para acessar a classe
DisplaceSmartFilter.Posso adicionar um DisplaceSmartFilter a uma camada raster regular? Os dados do filtro inteligente são armazenados com camadas de Smart Object, portanto o filtro deve ser adicionado à coleção
SmartFiltersde umSmartObjectLayer. Se o seu conteúdo estiver em uma camada regular, converta‑o primeiro para um Smart Object.Como faço para incorporar o mapa de deslocamento no PSD? Passe o caminho do mapa de deslocamento e
truepara o construtorDisplaceSmartFilter. Após salvar,IsDisplacementMapEmbeddedretornatrueeDisplaceMapDatacontém os dados do mapa incorporado.Quais valores a propriedade UndefinedAreas pode receber?
UndefinedAreassuportaWrapAround, que preenche os pixels indefinidos com conteúdo da borda oposta da imagem, eRepeatEdgePixels, que estende as cores dos pixels da borda.Qual é a diferença entre DisplacementMethod.Tile e DisplacementMethod.Stretch?
Tilerepete o mapa de deslocamento através da camada em seu tamanho original, enquantoStretchredimensiona o mapa para caber na camada.Preciso chamar UpdateResourceValues após modificar filtros inteligentes? Sim.
UpdateResourceValuesgrava a coleção de filtros modificada nos recursos da camada do Smart Object. Sem isso, o novo filtro não é persistido ao salvar.
Obtenha uma Licença Gratuita e Explore Mais
Avalie o Aspose.PSD for .NET sem limitações solicitando uma licença temporária:
Obtenha uma Licença Temporária Gratuita
Recursos adicionais para trabalhar com arquivos PSD em .NET:
- Documentação do Aspose.PSD para .NET
- Referência da API do Aspose.PSD para .NET
- Manipulação de Filtros Inteligentes no Aspose.PSD para C#
- Ferramentas PSD Online Gratuitas
