Notas de Lançamento do Aspose.PSD para .NET 24.5
Contents
[
Hide
]
Esta página contém notas de lançamento para o Aspose.PSD para .NET 24.5.
Chave | Resumo | Categoria |
---|---|---|
PSDNET-1897 | [Formato AI] Adicionar suporte para manipulação de arquivos AI com cabeçalho EPSF | Feature |
PSDNET-1755 | Semitransparência é processada de forma incorreta na visualização do arquivo psd | Bug |
PSDNET-1942 | Renderização parcialmente incorreta das camadas de forma | Bug |
PSDNET-1957 | Exceção ao salvar arquivos PSD com tamanho superior a 200 MB e dimensões grandes | Bug |
PSDNET-1998 | Falha ao salvar imagem em PDF após a atualização da versão 23.7 para 24.3 | Bug |
PSDNET-2033 | Corrigir o problema no método GetFontInfoRecords para as fontes chinesas | Bug |
Alterações na API Pública
APIs Adicionadas:
- P:Aspose.PSD.ImageOptions.PsdOptions.BackgroundContents
- P:Aspose.PSD.FileFormats.Ai.AiLayerSection.HasMultiLayerMasks
- P:Aspose.PSD.FileFormats.Ai.AiLayerSection.ColorIndex
APIs Removidas:
- Nenhuma
Exemplos de Uso:
PSDNET-1755. Semitransparência é processada de forma incorreta na visualização do arquivo psd
// Semitransparência é processada de forma incorreta na visualização do arquivo psd.
// BackgroundContents atribuído como Branco. Áreas transparentes devem ter a cor branca.
string arquivoOrigem = Path.Combine(pastaBase, "sapo_nosymb.psd");
string arquivoSaida = Path.Combine(pastaSaida, "sapo_nosymb_backgroundcontents_output.psd");
using (PsdImage imagemPsd = (PsdImage)Image.Load(arquivoOrigem))
{
RawColor corDeFundo = new RawColor(PixelDataFormat.Rgb32Bpp);
int valorArgb = 255 << 24 | 255 << 16 | 255 << 8 | 255;
corDeFundo.SetAsInt(valorArgb); // Branco
PsdOptions opcoesPsd = new PsdOptions(imagemPsd)
{
ColorMode = ColorModes.Rgb,
CompressionMethod = CompressionMethod.RLE,
ChannelsCount = 4,
BackgroundContents = corDeFundo,
};
imagemPsd.Save(arquivoSaida, opcoesPsd);
}
PSDNET-1897. [Formato AI] Adicionar suporte para manipulação de arquivos AI com cabeçalho EPSF
string arquivoOrigem = Path.Combine(pastaBase, "exemplo.ai");
string caminhoSaida = Path.Combine(pastaSaida, "exemplo.png");
void AssertAreEqual(object esperado, object atual)
{
if (!object.Equals(esperado, atual))
{
throw new Exception("Os objetos não são iguais.");
}
}
using (AiImage imagem = (AiImage)Image.Load(arquivoOrigem))
{
AssertAreEqual(imagem.Layers.Length, 2);
AssertAreEqual(imagem.Layers[0].HasMultiLayerMasks, false);
AssertAreEqual(imagem.Layers[0].ColorIndex, -1);
AssertAreEqual(imagem.Layers[1].HasMultiLayerMasks, false);
AssertAreEqual(imagem.Layers[1].ColorIndex, -1);
imagem.Save(caminhoSaida, new PngOptions());
}
PSDNET-1942. Renderização parcialmente incorreta das camadas de forma
string arquivoOrigem = Path.Combine(pastaBase, "TesteCamadaDeForma.psd");
string arquivoSaida = Path.Combine(pastaSaida, "TesteCamadaDeForma_saida.psd");
const int ImgToPsdRatio = 256 * 65535;
using (var im = (PsdImage)Image.Load(arquivoOrigem))
{
ShapeLayer camadaDeForma = (ShapeLayer)im.Layers[2];
IPath caminho = camadaDeForma.Path;
IPathShape[] formasCaminho = caminho.GetItems();
List<BezierKnotRecord> listaDeNos = new List<BezierKnotRecord>();
foreach (IPathShape formaCaminho in formasCaminho)
{
BezierKnotRecord[] nos = formaCaminho.GetItems();
listaDeNos.AddRange(nos);
}
// Alterar propriedades da camada
var novaForma = new PathShape();
BezierKnotRecord[] nosBezier = new BezierKnotRecord[]
{
new BezierKnotRecord()
{
IsLinked = true,
Points = new Point[3]
{
PointFToResourcePoint(
new PointF(100, 100),
camadaDeForma.Container.Size),
PointFToResourcePoint(
new PointF(100, 100),
camadaDeForma.Container.Size),
PointFToResourcePoint(
new PointF(100, 100),
camadaDeForma.Container.Size),
},
},
// Outros nós do Bezier
};
novaForma.SetItems(nosBezier);
List<IPathShape> novasFormas = new List<IPathShape>(formasCaminho);
novasFormas.Add(novaForma);
IPathShape[] novoCaminho = novasFormas.ToArray();
caminho.SetItems(novoCaminho);
camadaDeForma.Update();
im.Save(arquivoSaida, new PsdOptions());
}
using (var im = (PsdImage)Image.Load(arquivoSaida))
{
ShapeLayer camadaDeForma = (ShapeLayer)im.Layers[2];
IPath caminho = camadaDeForma.Path;
IPathShape[] formasCaminho = caminho.GetItems();
List<BezierKnotRecord> listaDeNos = new List<BezierKnotRecord>();
foreach (IPathShape formaCaminho in formasCaminho)
{
BezierKnotRecord[] nos = formaCaminho.GetItems();
listaDeNos.AddRange(nos);
}
AssertAreEqual(3, formasCaminho.Length);
AssertAreEqual(42, camadaDeForma.Left);
AssertAreEqual(14, camadaDeForma.Top);
AssertAreEqual(1600, camadaDeForma.Bounds.Width);
AssertAreEqual(1086, camadaDeForma.Bounds.Height);
}
Point PointFToResourcePoint(PointF ponto, Size tamanhoImagem)
{
return new Point(
(int)Math.Round(ponto.Y * (ImgToPsdRatio / tamanhoImagem.Height)),
(int)Math.Round(ponto.X * (ImgToPsdRatio / tamanhoImagem.Width)));
}
void AssertAreEqual(object esperado, object atual, string mensagem = null)
{
if (!object.Equals(esperado, atual))
{
throw new Exception(mensagem ?? "Os objetos não são iguais.");
}
}
PSDNET-1957. Exceção ao salvar arquivos PSD com tamanho superior a 200 MB e dimensões grandes
string arquivoOrigem = Path.Combine(pastaBase, "arquivoGrande.psd");
string arquivoSaida = Path.Combine(pastaSaida, "saida_raw.psd");
PsdLoadOptions opcoesCarregamento = new PsdLoadOptions()
{
LoadEffectsResource = true,
UseDiskForLoadEffectsResource = true
};
using (var imagemPsd = (PsdImage)Image.Load(arquivoOrigem, opcoesCarregamento))
{
// Não deve haver erro aqui
imagemPsd.Save(arquivoSaida, new PsdOptions { CompressionMethod = CompressionMethod.RLE });
}
PSDNET-1998. Falha na salvamento da imagem ao salvar em PDF após atualização da versão 23.7 para 24.3
string arquivoOrigem = Path.Combine(pastaBase, "CVFlor.psd");
string arquivoSaida = Path.Combine(pastaSaida, "_export.pdf");
using (var imagemPsd = (PsdImage)Image.Load(arquivoOrigem))
{
PdfOptions opcoesSalvar = new PdfOptions();
opcoesSalvar.PdfCoreOptions = new PdfCoreOptions();
imagemPsd.Save(arquivoSaida, opcoesSalvar);
}
PSDNET-2033. Corrigir o problema no método GetFontInfoRecords para as fontes chinesas
var pastaFonte = Path.Combine(pastaBase, "Fonte");
string arquivoOrigem = Path.Combine(pastaBase, "bd-worlds-best-pink.psd");
PsdLoadOptions opcoesCarregamentoPsd = new PsdLoadOptions();
opcoesCarregamentoPsd.LoadEffectsResource = true;
opcoesCarregamentoPsd.AllowWarpRepaint = true;
try
{
FontSettings.SetFontsFolders(new string[] { pastaFonte }, true);
FontSettings.UpdateFonts();
using (PsdImage imagem = (PsdImage)PsdImage.Load(arquivoOrigem, opcoesCarregamentoPsd))
{
foreach (var camada in imagem.Layers)
{
var camadaTexto = camada as TextLayer;
if (camadaTexto != null)
{
if (camadaTexto.Text == "melhor")
{
// Sem essa correção, haverá exceção devido à fonte chinesa.
camadaTexto.UpdateText("SUCESSO");
}
}
}
}
}
finally
{
FontSettings.Reset();
FontSettings.UpdateFonts();
}