Notas de la versión de Aspose.PSD para .NET 19.11
Contents
[
Hide
]
Esta página contiene las notas de la versión de Aspose.PSD para .NET 19.11
Clave | Resumen | Categoría |
---|---|---|
PSDNET-151 | Soporte de Efecto de Capa de Sombra Interna | Característica |
PSDNET-135 | Implementar renderizado de Capa de Relleno: Patrón | Característica |
PSDNET-187 | Soporte de Imágenes Raster en Archivos AI | Característica |
PSDNET-225 | Obtener propiedades de formateo en línea de TextLayer | Característica |
PSDNET-214 | Exportación incorrecta de PSD a otros formatos si contiene Efectos de Capa y Capas de Ajuste | Error |
Cambios en la API Pública
APIs Agregadas:
- T:Aspose.PSD.FileFormats.Ai.AiSection
- M:Aspose.PSD.FileFormats.Ai.AiSection.GetData
- P:Aspose.PSD.FileFormats.Ai.AiImage.Layers
- M:Aspose.PSD.FileFormats.Ai.AiImage.AddLayer(Aspose.PSD.FileFormats.Ai.AiLayerSection)
- T:Aspose.PSD.FileFormats.Ai.AiLayerSection
- P:Aspose.PSD.FileFormats.Ai.AiLayerSection.RasterImages
- M:Aspose.PSD.FileFormats.Ai.AiLayerSection.AddRasterImage(Aspose.PSD.FileFormats.Ai.AiRasterImageSection)
- T:Aspose.PSD.FileFormats.Ai.AiRasterImageSection
- P:Aspose.PSD.FileFormats.Ai.AiRasterImageSection.Name
- P:Aspose.PSD.FileFormats.Ai.AiRasterImageSection.Pixels
- P:Aspose.PSD.FileFormats.Ai.AiRasterImageSection.ImageRectangle
- P:Aspose.PSD.FileFormats.Ai.AiRasterImageSection.OffsetX
- P:Aspose.PSD.FileFormats.Ai.AiRasterImageSection.OffsetY
- P:Aspose.PSD.FileFormats.Ai.AiRasterImageSection.Width
- P:Aspose.PSD.FileFormats.Ai.AiRasterImageSection.Angle
- P:Aspose.PSD.FileFormats.Ai.AiRasterImageSection.LeftBottomShift
- P:Aspose.PSD.FileFormats.Ai.AiRasterImageSection.Height
- M:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.BlendingOptions.AddInnerShadow
- T:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.InnerShadowEffect
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.InnerShadowEffect.Color
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.InnerShadowEffect.BlendMode
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.InnerShadowEffect.IsVisible
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.InnerShadowEffect.Opacity
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.InnerShadowEffect.Angle
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.InnerShadowEffect.UseGlobalLight
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.InnerShadowEffect.Distance
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.InnerShadowEffect.Spread
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.InnerShadowEffect.Size
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.InnerShadowEffect.Noise
- T:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.IShadowEffect
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.IShadowEffect.Color
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.IShadowEffect.Angle
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.IShadowEffect.UseGlobalLight
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.IShadowEffect.Distance
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.IShadowEffect.Spread
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.IShadowEffect.Size
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.IShadowEffect.Noise
- M:Aspose.PSD.FileFormats.Psd.Layers.TextLayer.GetFonts
- P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle.FontIndex
- T:Aspose.PSD.FileFormats.Psd.Layers.Text.TextFontInfo
- P:Aspose.PSD.FileFormats.Psd.Layers.Text.TextFontInfo.FontType
- P:Aspose.PSD.FileFormats.Psd.Layers.Text.TextFontInfo.Script
- P:Aspose.PSD.FileFormats.Psd.Layers.Text.TextFontInfo.Synthetic
- P:Aspose.PSD.FileFormats.Psd.Layers.Text.TextFontInfo.PostScriptName
- P:Aspose.PSD.FileFormats.Psd.Layers.Text.TextFontInfo.FamilyName
- P:Aspose.PSD.FileFormats.Psd.Layers.Text.TextFontInfo.Style
APIs Eliminadas:
- M:Aspose.PSD.FileFormats.Ai.AiFinalizeSection.GetData
- M:Aspose.PSD.FileFormats.Ai.AiSetupSection.GetData
Ejemplos de Uso:
PSDNET-151. Soporte de Efecto de Capa de Sombra Interna
string sourceFile = "muestra.psd";
string destName = "muestra_salida.psd";
var loadOptions = new PsdLoadOptions()
{
LoadEffectsResource = true
};
// Cargar una imagen existente en una instancia de la clase PsdImage
using (var imagen = (PsdImage)Image.Load(sourceFile, loadOptions))
{
var capa = imagen.Layers[imagen.Layers.Length - 1];
var efectoSombra = (IShadowEffect)capa.BlendingOptions.Effects[0];
efectoSombra.Color = Color.Green;
efectoSombra.Opacity = 128;
efectoSombra.Distance = 1;
efectoSombra.UseGlobalLight = false;
efectoSombra.Size = 2;
efectoSombra.Angle = 45;
efectoSombra.Spread = 50;
efectoSombra.Noise = 5;
imagen.Save(destName, new PsdOptions(imagen));
}
PSDNET-135. Implementar renderizado de Capa de Relleno: Patrón
string sourceFile = "muestra.psd";
string destName = "muestra_salida.psd";
// Cargar una imagen existente en una instancia de la clase PsdImage
using (var imagen = (PsdImage)Image.Load(sourceFile))
{
foreach (var capa in imagen.Layers)
{
if (capa is FillLayer)
{
var capaRelleno = (FillLayer)capa;
var configuración = (IPatternFillSettings)capaRelleno.FillSettings;
configuración.HorizontalOffset = -5;
configuración.VerticalOffset = 12;
configuración.Scale = 300;
configuración.Linked = true;
configuración.PatternData = new int[]
{
Color.Black.ToArgb(), Color.Red.ToArgb(),
Color.Green.ToArgb(), Color.Blue.ToArgb(),
Color.White.ToArgb(), Color.AliceBlue.ToArgb(),
Color.Violet.ToArgb(), Color.Chocolate.ToArgb(),
Color.IndianRed.ToArgb(), Color.DarkOliveGreen.ToArgb(),
Color.CadetBlue.ToArgb(), Color.YellowGreen.ToArgb(),
Color.Black.ToArgb(), Color.Azure.ToArgb(),
Color.ForestGreen.ToArgb(), Color.Sienna.ToArgb(),
};
configuración.PatternHeight = 4;
configuración.PatternWidth = 4;
configuración.PatternName = "$$$/Presets/Patterns/ColorfulSquare=Colorful Square New\0";
configuración.PatternId = Guid.NewGuid().ToString() + "\0";
capaRelleno.Update();
break;
}
}
imagen.Save(destName, new PsdOptions(imagen));
}
PSDNET-187. Soporte de Imágenes Raster en Archivos AI
const double ToleranciaPredeterminada = 1e-6;
void AssertIsTrue(bool condición, string mensaje) {
if (!condición) {
throw new FormatException(mensaje);
}
}
string archivoFuente = "muestra.ai";
using(AiImage imagen = (AiImage) Image.Load(archivoFuente)) {
AiLayerSection capa = imagen.Layers[0];
AssertIsTrue(capa.RasterImages != null, "La propiedad RasterImages no debería ser nula");
AssertIsTrue(capa.RasterImages.Length == 1, "La propiedad RasterImages debería contener exactamente un ítem");
AiRasterImageSection imagenRaster = capa.RasterImages[0];
AssertIsTrue(imagenRaster.Pixels != null, "La propiedad rasterImage.Pixels no debería ser nula");
AssertIsTrue(imagenRaster.Pixels.Length == 100, "La propiedad rasterImage.Pixels debería contener exactamente 100 ítems");
AssertIsTrue((uint) imagenRaster.Pixels[99] == 0xFFB21616, "imagenRaster.Pixels[99] debería ser 0xFFB21616");
AssertIsTrue((uint) imagenRaster.Pixels[19] == 0xFF00FF00, "imagenRaster.Pixels[19] debería ser 0xFF00FF00");
AssertIsTrue((uint) imagenRaster.Pixels[10] == 0xFF01FD00, "imagenRaster.Pixels[10] debería ser 0xFF01FD00");
AssertIsTrue((uint) imagenRaster.Pixels[0] == 0xFF0000FF, "imagenRaster.Pixels[0] debería ser 0xFF0000FF");
AssertIsTrue(Math.Abs(0.999875 - imagenRaster.Width) < ToleranciaPredeterminada, "imagenRaster.Width debería ser 0.99987");
AssertIsTrue(Math.Abs(0.999875 - imagenRaster.Height) < ToleranciaPredeterminada, "imagenRaster.Height debería ser 0.99987");
AssertIsTrue(Math.Abs(387 - imagenRaster.OffsetX) < ToleranciaPredeterminada, "imagenRaster.OffsetX debería ser 387");
AssertIsTrue(Math.Abs(379 - imagenRaster.OffsetY) < ToleranciaPredeterminada, "imagenRaster.OffsetY debería ser 379");
AssertIsTrue(Math.Abs(0 - imagenRaster.Angle) < ToleranciaPredeterminada, "imagenRaster.Angle debería ser 0");
AssertIsTrue(Math.Abs(0 - imagenRaster.LeftBottomShift) < ToleranciaPredeterminada, "imagenRaster.LeftBottomShift debería ser 0");
AssertIsTrue(Math.Abs(0 - imagenRaster.ImageRectangle.X) < ToleranciaPredeterminada, "imagenRaster.ImageRectangle.X debería ser 0");
AssertIsTrue(Math.Abs(0 - imagenRaster.ImageRectangle.Y) < ToleranciaPredeterminada, "imagenRaster.ImageRectangle.Y debería ser 0");
AssertIsTrue(Math.Abs(10 - imagenRaster.ImageRectangle.Width) < ToleranciaPredeterminada, "imagenRaster.ImageRectangle.Width debería ser 10");
AssertIsTrue(Math.Abs(10 - imagenRaster.ImageRectangle.Height) < ToleranciaPredeterminada, "imagenRaster.ImageRectangle.Height debería ser 10");
}
PSDNET-225. Obtener propiedades de formateo en línea de TextLayer
using (var imagenPsd = (PsdImagen)Imagen.Cargar("formato_en_linea.psd"))
{
List<ITextPortion> textoRegular = new List<ITextPortion>();
List<ITextPortion> textoNegrita = new List<ITextPortion>();
List<ITextPortion> textoCursiva = new List<ITextPortion>();
var capas = imagenPsd.Layers;
for (int índice = 0; índice < capas.Longitud; índice++)
{
var capa = capas[índice];
if (!(capa es TextLayer))
{
continuar;
}
var capaTexto = (TextLayer)capa;
// obtiene fuentes que contiene la capa de texto
var fuentes = capaTexto.GetFonts();
var porcionesTexto = capaTexto.TextData.Items;
foreach (var porciónTexto in porcionesTexto)
{
TextFontInfo fuente = fuentes[porciónTexto.Style.FontIndex];
if (fuente != null)
{
switch (fuente.Style)
{
case FontStyle.Regular:
textoRegular.Agregar(porciónTexto);
romper;
case FontStyle.Bold:
textoNegrita.Agregar(porciónTexto);
romper;
case FontStyle.Italic:
textoCursiva.Agregar(porciónTexto);
romper;
defecto:
lanzar nuevo ArgumentOutOfRangeException();
}
}
}
}
}
PSDNET-214. Exportación incorrecta de PSD a otros formatos si contiene Efectos de Capa y Capas de Ajuste
var opcionesCarga = new PsdLoadOptions();
opcionesCarga.LoadEffectsResource = true;
usando (var imagen = (PsdImagen)Imagen.Cargar("clip_shadow.psd", opcionesCarga))
{
imagen.Guardar("salida.png", new PngOptions());
}