Notas de la versión de Aspose.PSD para .NET 24.4
Contents
[
Hide
]
Esta página contiene notas de la versión para Aspose.PSD para .NET 24.4
Clave | Resumen | Categoría |
---|---|---|
PSDNET-1871 | [AI Formato] Agregar manejo de recurso XObjectForm | Característica |
PSDNET-1961 | Agregar Constructor para ShapeLayer | Característica |
PSDNET-1879 | Corregir la conversión de archivo Psd de RGB a CMYK | Error |
PSDNET-1966 | Un archivo PSD específico no se puede exportar usando Aspose.PSD | Error |
Cambios en la API pública
APIs añadidas:
- M:Aspose.PSD.FileFormats.Psd.PsdImage.AddShapeLayer
APIs eliminadas:
- Ninguna
Ejemplos de uso:
PSDNET-1871. [AI Formato] Agregar manejo de recurso XObjectForm
string archivoFuente = Path.Combine(baseFolder, "ejemplo.ai");
string rutaArchivoSalida = Path.Combine(outputFolder, "ejemplo.png");
using (AiImage imagen = (AiImage)Image.Load(archivoFuente))
{
imagen.Save(rutaArchivoSalida, new PngOptions());
}
PSDNET-1879. Corregir conversión de archivo Psd de RGB a CMYK
// Verificar que el archivo psd convertido a CMYK + RLE 4 canales desde el archivo psd en RGB + RLE 4 canales, realmente tiene 4 canales
// y HasTransparencyData == false.
string archivoFuente = Path.Combine(baseFolder, "rana_nosimb.psd");
string archivoSalida = Path.Combine(outputFolder, "rana_nosimb_salida.psd");
using (PsdImage imagenPsd = (PsdImage)Image.Load(archivoFuente))
{
imagenPsd.HasTransparencyData = false;
PsdOptions opcionesPsd = new PsdOptions(imagenPsd)
{
ColorMode = ColorModes.Cmyk,
CompressionMethod = CompressionMethod.RLE,
ChannelsCount = 4,
};
imagenPsd.Save(archivoSalida, opcionesPsd);
}
using (PsdImage imagenPsd = (PsdImage)Image.Load(archivoSalida))
{
AssertAreEqual(false, imagenPsd.HasTransparencyData);
AssertAreEqual((ushort)4, imagenPsd.Layers[0].ChannelsCount);
}
void AssertAreEqual(object esperado, object actual, string mensaje = null)
{
if (!object.Equals(esperado, actual))
{
throw new Exception(mensaje ?? "Los objetos no son iguales.");
}
}
PSDNET-1961. Agregar Constructor para ShapeLayer
string archivoSalida = Path.Combine(outputFolder, "AgregarShapeLayer_salida.psd");
const int RelacionImgAPsd = 256 * 65535;
using (PsdImage nuevoPsd = new PsdImage(600, 400))
{
ShapeLayer capa = nuevoPsd.AddShapeLayer();
var nuevaForma = GenerarNuevaForma(nuevoPsd.Size);
List<IPathShape> nuevasFormas = new List<IPathShape>();
nuevasFormas.Add(nuevaForma);
capa.Path.SetItems(nuevasFormas.ToArray());
capa.Update();
nuevoPsd.Save(archivoSalida);
}
using (PsdImage imagen = (PsdImage)Image.Load(archivoSalida))
{
AssertAreEqual(2, imagen.Layers.Length);
ShapeLayer capaForma = imagen.Layers[1] as ShapeLayer;
ColorFillSettings rellenoInterno = capaForma.Fill as ColorFillSettings;
IStrokeSettings configuraciónTrazo = capaForma.Stroke;
ColorFillSettings rellenoTrazo = capaForma.Stroke.Fill as ColorFillSettings;
AssertAreEqual(1, capaForma.Path.GetItems().Length); // 1 forma
AssertAreEqual(3, capaForma.Path.GetItems()[0].GetItems().Length); // 3 puntos en una forma
AssertAreEqual(-16127182, rellenoInterno.Color.ToArgb()); // ff09eb32
AssertAreEqual(7.41, configuraciónTrazo.Size);
AssertAreEqual(false, configuraciónTrazo.Enabled);
AssertAreEqual(StrokePosition.Center, configuraciónTrazo.LineAlignment);
AssertAreEqual(LineCapType.ButtCap, configuraciónTrazo.LineCap);
AssertAreEqual(LineJoinType.MiterJoin, configuraciónTrazo.LineJoin);
AssertAreEqual(-16777216, rellenoTrazo.Color.ToArgb()); // ff000000
}
PathShape GenerarNuevaForma(Size tamañoImagen)
{
var nuevaForma = new PathShape();
PointF punto1 = new PointF(20, 100);
PointF punto2 = new PointF(200, 100);
PointF punto3 = new PointF(300, 10);
BezierKnotRecord[] puntosBezier = new BezierKnotRecord[]
{
new BezierKnotRecord()
{
IsLinked = true,
Points = new Point[3]
{
PointFAPuntoRecurso(punto1, tamañoImagen),
PointFAPuntoRecurso(punto1, tamañoImagen),
PointFAPuntoRecurso(punto1, tamañoImagen),
}
},
new BezierKnotRecord()
{
IsLinked = true,
Points = new Point[3]
{
PointFAPuntoRecurso(punto2, tamañoImagen),
PointFAPuntoRecurso(punto2, tamañoImagen),
PointFAPuntoRecurso(punto2, tamañoImagen),
}
},
new BezierKnotRecord()
{
IsLinked = true,
Points = new Point[3]
{
PointFAPuntoRecurso(punto3, tamañoImagen),
PointFAPuntoRecurso(punto3, tamañoImagen),
PointFAPuntoRecurso(punto3, tamañoImagen),
}
},
};
nuevaForma.SetItems(puntosBezier);
return nuevaForma;
}
Point PointFAPuntoRecurso(PointF punto, Size tamañoImagen)
{
return new Point(
(int)Math.Round(punto.Y * (RelacionImgAPsd / tamañoImagen.Height)),
(int)Math.Round(punto.X * (RelacionImgAPsd / tamañoImagen.Width)));
}
void AssertAreEqual(object esperado, object actual, string mensaje = null)
{
if (!object.Equals(esperado, actual))
{
throw new Exception(mensaje ?? "Los objetos no son iguales.");
}
}
PSDNET-1966. Un archivo PSD específico no se puede exportar usando Aspose.PSD
string archivoFuente = Path.Combine(baseFolder, "fuente1966.psd");
string salidaPng = Path.Combine(outputFolder, "salida.png");
using (var imagenPsd = (PsdImage)Image.Load(archivoFuente, new PsdLoadOptions() { LoadEffectsResource = true }))
{
imagenPsd.Save(salidaPng, new PngOptions());
}