Aspose.PSD para .NET 20.2 - Notas de Lançamento
Chave | Resumo | Categoria |
---|---|---|
PSDNET-206 | Melhoria da capacidade de renderizar texto de cores diferentes na Camada de Texto | Recurso |
PSDNET-369 | Suporte para recurso clbl (Recurso da Camada contém informações sobre elementos de clipe de mistura) | Recurso |
PSDNET-274 | Suporte para recurso blwh (Recurso contém Dados da Camada de Ajuste de Preto e Branco) | Recurso |
PSDNET-230 | Capacidade de exportar Grupo de Camadas para Jpeg/Png/Tiff/Gif/Bmp/Jpeg2000/Psd/Psb/Pdf | Recurso |
PSDNET-372 | Suporte para recurso lspf (Contém configurações sobre configuração de Camada Protegida) | Recurso |
PSDNET-370 | Suporte para recurso infx (Contém dados sobre Mistura de elementos interiores) | Recurso |
PSDNET-251 | Refatoração de PsdImage e Camada para alterar o comportamento de Transformação (Redimensionamento/Rotação/Corte corretos para máscaras de camada se transformarmos uma camada separadamente) | Aprimoramento |
PSDNET-276 | Em algumas configurações de globalização, a imagem raster AI não pode ser aberta | Erro |
PSDNET-194 | Após realizar a operação FlipRotate na Camada, a Imagem PSD se torna ilegível | Erro |
PSDNET-177. | System.ArgumentException durante o carregamento do arquivo PSD | Erro |
PSDNET-249 | Após usar um método de transformação apenas para uma camada, a camada salva tem limites incorretos ou uma máscara | Erro |
Mudanças na API Pública
APIs Adicionadas:
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerMaskDataFull.UserMaskRectangle
- M:Aspose.PSD.FileFormats.Ai.AiDataSection.ReleaseManagedResources
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerGroup.Width
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerGroup.Height
- T:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.Reds
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.Yellows
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.Greens
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.Cyans
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.Blues
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.Magentas
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.UseTint
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.BwPresetKind
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.BlackAndWhitePresetFileName
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.TintColor
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.TintColorRed
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.TintColorGreen
- P:Aspose.PSD.FileFormats.Psd.Layers.AdjustmentLayers.BlackWhiteAdjustmentLayer.TintColorBlue
- T:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource
- M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.#ctor
- M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Save(Aspose.PSD.StreamContainer,System.Int32)
- F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.TypeToolKey
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Key
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Length
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.PsdVersion
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Reds
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Yellows
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Greens
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Cyans
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Blues
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Magentas
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.UseTint
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.BwPresetKind
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.BlackAndWhitePresetFileName
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.TintColor
- M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lr16Resource.#ctor
- P:Aspose.PSD.Xmp.Types.Derived.RenditionClass.DefinedValues
- T:Aspose.PSD.AggregateException
- M:Aspose.PSD.CmykColor.Equals(System.Object)
- T:Aspose.PSD.CompositeException
- T:Aspose.PSD.CoreExceptions.IndexOutOFRangeException
- M:Aspose.PSD.CoreExceptions.IndexOutOFRangeException.#ctor(System.String)
- M:Aspose.PSD.CoreExceptions.IndexOutOFRangeException.#ctor(System.String,System.Exception)
- F:Aspose.PSD.FileFormat.Otg
- T:Aspose.PSD.FileFormats.Jpeg2000.Jpeg2000CustomException
- T:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource
- M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.#ctor(System.Int32)
- M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.#ctor(System.Byte[])
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.Key
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.Length
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.PsdVersion
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.IsDataStoredDiscretely
- M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.GetChannelData(System.Int32)
- M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.GetActiveManager
- M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.Save(Aspose.PSD.StreamContainer,System.Int32)
- M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.GetCurveManager
- F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.TypeToolKey
- T:Aspose.PSD.ImageOptions.TiffOptionsUtils
- M:Aspose.PSD.ImageOptions.TiffOptionsUtils.#ctor
- M:Aspose.PSD.ImageOptions.TiffOptionsUtils.GetValidTagsCount(Aspose.PSD.FileFormats.Tiff.TiffDataType[])
- P:Aspose.PSD.ImageOptionsBase.ProgressEventHandler
- P:Aspose.PSD.LoadOptions.ProgressEventHandler
- M:Aspose.PSD.Matrix.#ctor(Aspose.PSD.Matrix)
- M:Aspose.PSD.Metered.Equals(System.Object)
- T:Aspose.PSD.ProgressEventHandler
- T:Aspose.PSD.ProgressManagement.EventType
- F:Aspose.PSD.ProgressManagement.EventType.RelativeProgress
- F:Aspose.PSD.ProgressManagement.EventType.StageChange
- F:Aspose.PSD.ProgressManagement.EventType.Initialization
- F:Aspose.PSD.ProgressManagement.EventType.PreProcessing
- F:Aspose.PSD.ProgressManagement.EventType.Processing
- F:Aspose.PSD.ProgressManagement.EventType.Finalization
- T:Aspose.PSD.ProgressManagement.ProgressEventHandlerInfo
- P:Aspose.PSD.ProgressManagement.ProgressEventHandlerInfo.Description
- P:Aspose.PSD.ProgressManagement.ProgressEventHandlerInfo.EventType
- P:Aspose.PSD.ProgressManagement.ProgressEventHandlerInfo.MaxValue
- P:Aspose.PSD.ProgressManagement.ProgressEventHandlerInfo.Value
- M:Aspose.PSD.RasterImage.GetSkewAngle
- M:Aspose.PSD.RasterImage.NormalizeAngle
- M:Aspose.PSD.RasterImage.NormalizeAngle(System.Boolean,Aspose.PSD.Color)
APIs Removidas:
- M:Aspose.PSD.FileFormats.Ai.AiDataSection.Dispose
- P:Aspose.PSD.FileFormats.Ai.AiRasterImageSection.ImageRectangle
- M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lr16Resource.#ctor(System.Int32)
- F:Aspose.PSD.Xmp.Types.Derived.RenditionClass.DefinedValues
Exemplos de uso:
PSDNET-206. Melhoria da capacidade de renderizar texto de cores diferentes na Camada de Texto
using (var imagemPsd = (PsdImage)Image.Load("texto_etalon_cores_diferentes.psd"))
{
var camadaTexto = (TextLayer)imagemPsd.Layers[1];
camadaTexto.TextData.UpdateLayerData();
imagemPsd.Save("saida.png", new PngOptions());
}
PSDNET-369. Suporte para recurso clbl (Recurso da Camada contém informações sobre elementos de clipe de mistura)
void AssertIsTrue(bool condicao, string mensagem)
{
if (!condicao)
{
throw new FormatException(mensagem);
}
}
string arquivoFonte = "AmostraParaRecurso.psd";
string arquivoDestino = "Saída" + arquivoFonte;
ClblResource GetClblResource(PsdImage im)
{
foreach (var camada in im.Layers)
{
foreach (var recursoCamada in camada.Resources)
{
if (recursoCamada is ClblResource)
{
return (ClblResource)recursoCamada;
}
}
}
throw new Exception("O ClblResource especificado não foi encontrado");
}
using (PsdImage im = (PsdImage)Image.Load(arquivoFonte))
{
var recurso = GetClblResource(im);
AssertIsTrue(recurso.BlendClippedElements, "O ClblResource.BlendClippedElements deve ser verdadeiro");
// Teste de edição e salvamento
recurso.BlendClippedElements = false;
im.Save(arquivoDestino);
}
using (PsdImage im = (PsdImage)Image.Load(arquivoDestino))
{
var recurso = GetClblResource(im);
AssertIsTrue(!recurso.BlendClippedElements, "O ClblResource.BlendClippedElements deve mudar para falso");
}
PSDNET-274. Suporte para recurso blwh (Recurso contém Dados da Camada de Ajuste de Preto e Branco)
const string MensagemValorAtualIncorreto = "O valor da propriedade esperado não é igual ao valor atual";
void AssertIsTrue(bool condicao, string mensagem)
{
if (!condicao)
{
throw new FormatException(mensagem);
}
}
void ExemploSuporteDeRecursoBlwh(
string arquivoFonte,
int vermelhos,
int amarelos,
int verdes,
int cianos,
int azuis,
int magentas,
bool usarTonalidade,
int tipoPresetPretoBranco,
string nomePresetPretoBranco,
double tonalidadeVermelha,
double tonalidadeVerde,
double tonalidadeAzul,
int tonalidade,
int novaTonalidade)
{
string arquivoDestino = "Saída" + arquivoFonte;
bool recursoRequeridoEncontrado = false;
using (PsdImage im = (PsdImage)Image.Load(arquivoFonte))
{
foreach (var camada in im.Layers)
{
foreach (var recursoCamada in camada.Resources)
{
if (recursoCamada is BlwhResource)
{
var recursoBlwh = (BlwhResource)recursoCamada;
var camadaBlwh = (BlackWhiteAdjustmentLayer)camada;
recursoRequeridoEncontrado = true;
AssertIsTrue(recursoBlwh.Reds == vermelhos, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.Yellows == amarelos, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.Greens == verdes, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.Cyans == cianos, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.Blues == azuis, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.Magentas == magentas, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.UseTint == usarTonalidade, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.TintColor == tonalidade, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.BwPresetKind == tipoPresetPretoBranco, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.BlackAndWhitePresetFileName == nomePresetPretoBranco, MensagemValorAtualIncorreto);
AssertIsTrue(Math.Abs(camadaBlwh.TintColorRed - tonalidadeVermelha) < 1e-6, MensagemValorAtualIncorreto);
AssertIsTrue(Math.Abs(camadaBlwh.TintColorGreen - tonalidadeVerde) < 1e-6, MensagemValorAtualIncorreto);
AssertIsTrue(Math.Abs(camadaBlwh.TintColorBlue - tonalidadeAzul) < 1e-6, MensagemValorAtualIncorreto);
// Teste de edição e salvamento
recursoBlwh.Reds = vermelhos - 15;
recursoBlwh.Yellows = amarelos - 15;
recursoBlwh.Greens = verdes + 15;
recursoBlwh.Cyans = cianos + 15;
recursoBlwh.Blues = azuis - 15;
recursoBlwh.Magentas = magentas - 15;
recursoBlwh.UseTint = !usarTonalidade;
recursoBlwh.BwPresetKind = 4;
recursoBlwh.BlackAndWhitePresetFileName = "nomePresetPretoBranco";
camadaBlwh.TintColorRed = tonalidadeVermelha - 60;
camadaBlwh.TintColorGreen = tonalidadeVerde - 60;
camadaBlwh.TintColorBlue = tonalidadeAzul - 60;
im.Save(arquivoDestino);
break;
}
}
}
}
AssertIsTrue(recursoRequeridoEncontrado, "O BlwhResource especificado não foi encontrado");
recursoRequeridoEncontrado = false;
using (PsdImage im = (PsdImage)Image.Load(arquivoDestino))
{
foreach (var camada in im.Layers)
{
foreach (var recursoCamada in camada.Resources)
{
if (recursoCamada is BlwhResource)
{
var recursoBlwh = (BlwhResource)recursoCamada;
var camadaBlwh = (BlackWhiteAdjustmentLayer)camada;
recursoRequeridoEncontrado = true;
AssertIsTrue(recursoBlwh.Reds == vermelhos - 15, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.Yellows == amarelos - 15, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.Greens == verdes + 15, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.Cyans == cianos + 15, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.Blues == azuis - 15, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.Magentas == magentas - 15, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.UseTint == !usarTonalidade, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.TintColor == novaTonalidade, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.BwPresetKind == 4, MensagemValorAtualIncorreto);
AssertIsTrue(recursoBlwh.BlackAndWhitePresetFileName == "nomePresetPretoBranco", MensagemValorAtualIncorreto);
AssertIsTrue(Math.Abs(camadaBlwh.TintColorRed - tonalidadeVermelha + 60) < 1e-6, MensagemValorAtualIncorreto);
AssertIsTrue(Math.Abs(camadaBlwh.TintColorGreen - tonalidadeVerde + 60) < 1e-6, MensagemValorAtualIncorreto);
AssertIsTrue(Math.Abs(camadaBlwh.TintColorBlue - tonalidadeAzul + 60) < 1e-6, MensagemValorAtualIncorreto);
break;
}
}
}
}
AssertIsTrue(recursoRequeridoEncontrado, "O BlwhResource especificado não foi encontrado");
}
ExemploSuporteDeRecursoBlwh(
"CamadaAjustePretoBrancoListrasMascara.psd",
0x28,
0x3c,
0x28,
0x3c,
0x14,
0x50,
false,
1,
"\0",
225.00045776367188,
211.00067138671875,
179.00115966796875,
-1977421,
-5925001);
ExemploSuporteDeRecursoBlwh(
"CamadaAjustePretoBrancoListrasMascara2.psd",
0x80,
0x40,
0x20,
0x10,
0x08,
0x04,
true,
4,
"\0",
239.996337890625,
127.998046875,
63.9990234375,
-1015744,
-4963324);
Console.WriteLine("A atualização de BlwhResource funciona como esperado. Pressione qualquer tecla.");
PSDNET-230. Capacidade de exportar Grupo de Camadas para Jpeg/Png/Tiff/Gif/Bmp/Jpeg2000/Psd/Psb/Pdf
using (var imagemPsd = (PsdImage)Image.Load("1.psd"))
{
// pasta com o fundo
LayerGroup pastaFundo = (LayerGroup)imagemPsd.Layers[0];
// pasta com o conteúdo
LayerGroup pastaConteudo = (LayerGroup)imagemPsd.Layers[4];
pastaFundo.Save("fundo.png", new PngOptions());
pastaConteudo.Save("conteudo.png", new PngOptions());
}
PSDNET-372. Suporte para recurso lspf (Contém configurações sobre configuração de Camada Protegida)
const string MensagemValorAtualIncorreto = "O valor da propriedade esperado não é igual ao valor atual";
void AssertIsTrue(bool condicao, string mensagem)
{
if (!condicao)
{
throw new FormatException(mensagem);
}
}
string arquivoFonte = "AmostraParaRecurso.psd";
string arquivoDestino = "Saída" + arquivoFonte;
bool recursoRequeridoEncontrado = false;
using (PsdImage im = (PsdImage)Image.Load(arquivoFonte))
{
foreach (var camada in im.Layers)
{
foreach (var recursoCamada in camada.Resources)
{
if (recursoCamada is LspfResource)
{
var recurso = (LspfResource)recursoCamada;
recursoRequeridoEncontrado = true;
AssertIsTrue(false == recurso.IsCompositeProtected, MensagemValorAtualIncorreto);
AssertIsTrue(false == recurso.IsPositionProtected, MensagemValorAtualIncorreto);
AssertIsTrue(false == recurso.IsTransparencyProtected, MensagemValorAtualIncorreto);
// Teste de edição e salvamento
recurso.IsCompositeProtected = true;
AssertIsTrue(true == recurso.IsCompositeProtected, MensagemValorAtualIncorreto);
AssertIsTrue(false == recurso.IsPositionProtected, MensagemValorAtualIncorreto);
AssertIsTrue(false == recurso.IsTransparencyProtected, MensagemValorAtualIncorreto);
recurso.IsCompositeProtected = false;
recurso.IsPositionProtected = true;
AssertIsTrue(false == recurso.IsCompositeProtected, MensagemValorAtualIncorreto);
AssertIsTrue(true == recurso.IsPositionProtected, MensagemValorAtualIncorreto);
AssertIsTrue(false == recurso.IsTransparencyProtected, MensagemValorAtualIncorreto);
recurso.IsPositionProtected = false;
recurso.IsTransparencyProtected = true;
AssertIsTrue(false == recurso.IsCompositeProtected, MensagemValorAtualIncorreto);
AssertIsTrue(false == recurso.IsPositionProtected, MensagemValorAtualIncorreto);
AssertIsTrue(true == recurso.IsTransparencyProtected, MensagemValorAtualIncorreto);
recurso.IsCompositeProtected = true;
recurso.IsPositionProtected = true;
recurso.IsTransparencyProtected = true;
im.Save(arquivoDestino);
break;
}
}
}
}
AssertIsTrue(recursoRequeridoEncontrado, "O LspfResource especificado não foi encontrado");
recursoRequeridoEncontrado = false;
using (PsdImage im = (PsdImage)Image.Load(arquivoDestino))
{
foreach (var camada in im.Layers)
{
foreach (var recursoCamada in camada.Resources)
{
if (recursoCamada is LspfResource)
{
var recurso = (LspfResource)recursoCamada;
recursoRequeridoEncontrado = true;
AssertIsTrue(recurso.IsCompositeProtected, MensagemValorAtualIncorreto);
AssertIsTrue(recurso.IsPositionProtected, MensagemValorAtualIncorreto);
AssertIsTrue(recurso.IsTransparencyProtected, MensagemValorAtualIncorreto);
break;
}
}
}
}
AssertIsTrue(recursoRequeridoEncontrado, "O LspfResource especificado não foi encontrado");
Console.WriteLine("A atualização de LspfResource funciona como esperado. Pressione qualquer tecla.");
PSDNET-370. Suporte para recurso infx (Contém dados sobre Mistura de elementos interiores)
void AssertIsTrue(bool condicao, string mensagem)
{
if (!condicao)
{
throw new FormatException(mensagem);
}
}
string arquivoFonte = "AmostraParaRecurso.psd";
string arquivoDestino = "Saída" + arquivoFonte;
bool recursoRequeridoEncontrado = false;
using (PsdImage im = (PsdImage)Image.Load(arquivoFonte))
{
foreach (var camada in im.Layers)
{
foreach (var recursoCamada in camada.Resources)
{
if (recursoCamada is InfxResource)
{
var recurso = (InfxResource)recursoCamada;
recursoRequeridoEncontrado = true;
AssertIsTrue(!recurso.BlendInteriorElements, "O InfxResource.BlendInteriorElements deve ser falso");
// Teste de edição e salvamento
recurso.BlendInteriorElements = true;
im.Save(arquivoDestino);
break;
}
}
}
}
AssertIsTrue(recursoRequeridoEncontrado, "O InfxResource especificado não foi encontrado");
recursoRequeridoEncontrado = false;
using (PsdImage im = (PsdImage)Image.Load(arquivoDestino))
{
foreach (var camada in im.Layers)
{
foreach (var recursoCamada in camada.Resources)
{
if (recursoCamada is InfxResource)
{
var recurso = (InfxResource)recursoCamada;
recursoRequeridoEncontrado = true;
AssertIsTrue(recurso.BlendInteriorElements, "O InfxResource.BlendInteriorElements deve mudar para verdadeiro");
break;
}
}
}
}
AssertIsTrue(recursoRequeridoEncontrado, "O InfxResource especificado não foi encontrado");
PSDNET-251. Refatoração de PsdImage e Camada para alterar o comportamento de Transformação (Redimensionamento/Rotação/Corte corretos para máscaras de camada se transformarmos uma camada separadamente)
var enums = (RotateFlipType[])Enum.GetValues(typeof(RotateFlipType));
var fileNames = new string[]
{
"UmaRegularEUmaAjustadaComVetorELayerMask",
"UmaRegularEUmaAjustadaComLayerMask",
"CamadaTexto",
"FormasVinculadasComTexto"
};
foreach (string nomeArquivo in fileNames)
{
foreach (RotateFlipType rotateFlipType in enums)
{
string arquivoFonte = nomeArquivo + ".psd";
string arquivoDestino = nomeArquivo + "_" + rotateFlipType;
var opcoesCarregamentoPsd = new PsdLoadOptions() { LoadEffectsResource = true };
using (PsdImage imagem = (PsdImage)Image.Load(arquivoFonte, opcoesCarregamentoPsd))
{
imagem.RotateFlip(rotateFlipType);
imagem.Save(arquivoDestino);
}
}
}
PSDNET-276. Em algumas configurações de globalização, a imagem raster AI não pode ser aberta
string arquivoFonte = "form_raster_8.ai";
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ru_RU");
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture;
using (AiImage imagem = (AiImage)Image.Load(arquivoFonte))
{
// não deve lançar exceção
}
PSDNET-194. Após realizar a operação FlipRotate na Camada, a Imagem PSD se torna ilegível
string arquivoFonte = GetFileInCustomFolderRelativeToBase(@"testdata\Issues\IMAGINGNET-2617\1.psd");
var tipoRotacao = RotateFlipType.Rotate90FlipNone;
var arquivoSaidaPsd = this.GetFileInOutputFolder("RotateFlipTest2617.psd");
try
{
using (PsdImage imagem = (PsdImage)Image.Load(arquivoFonte))
{
for (int i = 0; i < imagem.Layers.Length; i++)
{
var camada = imagem.Layers[i];
if (!camada.Bounds.IsEmpty)
{
camada.RotateFlip(tipoRotacao);
}
}
string arquivoSaidaPng = this.GetFileInOutputFolder("RotateFlipTest2617.png");
imagem.Save(arquivoSaidaPsd);
}
// Aqui lançamos exceção. Para o PhotoShop esse arquivo também é ilegível,
using (PsdImage imagem = (PsdImage)Image.Load(arquivoSaidaPsd)) // Lança uma exceção
{
// Não faz nada
}
PSDNET-177. System.ArgumentException durante o carregamento do arquivo PSD
string caminhoFonte = "1.psd";
string caminhoPsd = "RotateFlipTest2617.psd";
RotateFlipType tipoFlip = RotateFlipType.Rotate270FlipXY;
using (var im = (PsdImage)(Image.Load(caminhoFonte)))
{
im.RotateFlip(tipoFlip);
im.Save(caminhoPsd);
}
using (var im = (PsdImage)(Image.Load(caminhoPsd))) // Aqui não devemos receber exceções
{
// não fazer nada
}
PSDNET-249. Após usar um método de transformação apenas para uma camada, a camada salva tem limites incorretos ou uma máscara
void AssertIsTrue(bool condicao, string mensagem)
{
if (!condicao)
{
throw new FormatException(mensagem);
}
}
const double Tolerancia = 1e-6;
int novaLargura = 132;
int novaAltura = 247;
double xEscala = novaLargura / 48.0;
double yEscala = novaAltura / 19.0;
string arquivoFonte = "CamadaTexto.psd";
string arquivoSaida = "CamadaTextoRedimensionada" + novaLargura + "_" + novaAltura;
var opcoesCarregamentoPsd = new PsdLoadOptions() { LoadEffectsResource = true };
using (PsdImage imagem = (PsdImage) Image.Load(arquivoFonte, opcoesCarregamentoPsd))
{
var camada = imagem.Layers[1] as TextLayer;
var novoLeft = camada.Left - (novaLargura - camada.Width) / 2;
var novoTop = camada.Top - (novaAltura - camada.Height) / 2;
camada.Resize(novaLargura, novaAltura);
AssertIsTrue(camada.Left == novoLeft, "A propriedade Left da camada deve ser " + novoLeft);
AssertIsTrue(camada.Top == novoTop, "A propriedade Top da camada deve ser " + novoTop);
AssertIsTrue(camada.Width == novaLargura, "A propriedade Width da camada deve ser " + novaLargura);
AssertIsTrue(camada.Height == novaAltura, "A propriedade Height da camada deve ser " + novaAltura);
AssertIsTrue(Math.Abs(camada.TransformMatrix[0] - xEscala) <= Tolerancia, "A propriedade TransformMatrix[0] da camada deve ser " + xEscala);
AssertIsTrue(Math.Abs(camada.TransformMatrix[3] - yEscala) <= Tolerancia, "A propriedade TransformMatrix[3] da camada deve ser " + yEscala);
AssertIsTrue(Math.Abs(camada.TransformMatrix[4] - novoLeft) <= Tolerancia, "A propriedade TransformMatrix[4] da camada deve ser " + novoLeft);
AssertIsTrue(Math.Abs(camada.TransformMatrix[5] - novoTop) <= Tolerancia, "A propriedade TransformMatrix[5] da camada deve ser " + novoTop);
imagem.Save(arquivoSaida + ".psd", new PsdOptions());
imagem.Save(arquivoSaida + ".png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
}