Version 24.4 of the Aspose.PSD for .NET API (MSI installer) brings valuable improvements for C# and VB.NET developers working with PSD files. The new features optimize AI format processing, shape creation, and more.
Developers can now process XObjectForm
resources within AI files, enabling better conversion capabilities for their document conversion solutions. Please check out the following C# code sample, which demonstrates how to handle XObjectForm
resources import:
string sourceFile = Path.Combine(baseFolder, "example.ai");
string outputFilePath = Path.Combine(outputFolder, "example.png");
using (AiImage image = (AiImage)Image.Load(sourceFile))
{
image.Save(outputFilePath, new PngOptions());
}
Source*
Simplified ShapeLayer Creation
A new constructor for the ShapeLayer
class has been introduced in this .NET PSD processing library release. It allows you to add shapes to PSD files conveniently. The following code example highlights how to add shape layers with Aspose.PSD for .NET 24.4:
string outputFile = Path.Combine(outputFolder, "AddShapeLayer_output.psd");
const int ImgToPsdRatio = 256 * 65535;
using (PsdImage newPsd = new PsdImage(600, 400))
{
ShapeLayer layer = newPsd.AddShapeLayer();
var newShape = GenerateNewShape(newPsd.Size);
List<IPathShape> newShapes = new List<IPathShape>();
newShapes.Add(newShape);
layer.Path.SetItems(newShapes.ToArray());
layer.Update();
newPsd.Save(outputFile);
}
using (PsdImage image = (PsdImage)Image.Load(outputFile))
{
AssertAreEqual(2, image.Layers.Length);
ShapeLayer shapeLayer = image.Layers[1] as ShapeLayer;
ColorFillSettings internalFill = shapeLayer.Fill as ColorFillSettings;
IStrokeSettings strokeSettings = shapeLayer.Stroke;
ColorFillSettings strokeFill = shapeLayer.Stroke.Fill as ColorFillSettings;
AssertAreEqual(1, shapeLayer.Path.GetItems().Length); // 1 Shape
AssertAreEqual(3, shapeLayer.Path.GetItems()[0].GetItems().Length); // 3 knots in a shape
AssertAreEqual(-16127182, internalFill.Color.ToArgb()); // ff09eb32
AssertAreEqual(7.41, strokeSettings.Size);
AssertAreEqual(false, strokeSettings.Enabled);
AssertAreEqual(StrokePosition.Center, strokeSettings.LineAlignment);
AssertAreEqual(LineCapType.ButtCap, strokeSettings.LineCap);
AssertAreEqual(LineJoinType.MiterJoin, strokeSettings.LineJoin);
AssertAreEqual(-16777216, strokeFill.Color.ToArgb()); // ff000000
}
PathShape GenerateNewShape(Size imageSize)
{
var newShape = new PathShape();
PointF point1 = new PointF(20, 100);
PointF point2 = new PointF(200, 100);
PointF point3 = new PointF(300, 10);
BezierKnotRecord[] bezierKnots = new BezierKnotRecord[]
{
new BezierKnotRecord()
{
IsLinked = true,
Points = new Point[3]
{
PointFToResourcePoint(point1, imageSize),
PointFToResourcePoint(point1, imageSize),
PointFToResourcePoint(point1, imageSize),
}
},
new BezierKnotRecord()
{
IsLinked = true,
Points = new Point[3]
{
PointFToResourcePoint(point2, imageSize),
PointFToResourcePoint(point2, imageSize),
PointFToResourcePoint(point2, imageSize),
}
},
new BezierKnotRecord()
{
IsLinked = true,
Points = new Point[3]
{
PointFToResourcePoint(point3, imageSize),
PointFToResourcePoint(point3, imageSize),
PointFToResourcePoint(point3, imageSize),
}
},
};
newShape.SetItems(bezierKnots);
return newShape;
}
Point PointFToResourcePoint(PointF point, Size imageSize)
{
return new Point(
(int)Math.Round(point.Y * (ImgToPsdRatio / imageSize.Height)),
(int)Math.Round(point.X * (ImgToPsdRatio / imageSize.Width)));
}
void AssertAreEqual(object expected, object actual, string message = null)
{
if (!object.Equals(expected, actual))
{
throw new Exception(message ?? "Objects are not equal.");
}
}
Source*
Accurate RGB to CMYK Conversion
Experience improved handling of color conversions and accurate transformation of PSD files from RGB to CMYK format. This code sample shows how to perform this conversion with the .NET library:
// Check that psd file converted to CMYK + RLE 4 channels from psd file in RGB + RLE 4 channels, really has 4 channels
// and HasTransparencyData == false.
string sourceFile = Path.Combine(baseFolder, "frog_nosymb.psd");
string outputFile = Path.Combine(outputFolder, "frog_nosymb_output.psd");
using (PsdImage psdImage = (PsdImage)Image.Load(sourceFile))
{
psdImage.HasTransparencyData = false;
PsdOptions psdOptions = new PsdOptions(psdImage)
{
ColorMode = ColorModes.Cmyk,
CompressionMethod = CompressionMethod.RLE,
ChannelsCount = 4,
};
psdImage.Save(outputFile, psdOptions);
}
using (PsdImage psdImage = (PsdImage)Image.Load(outputFile))
{
AssertAreEqual(false, psdImage.HasTransparencyData);
AssertAreEqual((ushort)4, psdImage.Layers[0].ChannelsCount);
}
void AssertAreEqual(object expected, object actual, string message = null)
{
if (!object.Equals(expected, actual))
{
throw new Exception(message ?? "Objects are not equal.");
}
}
Source*
Optimized PSD Export
We have fixed the issues preventing the export of specific PSD files, which ensures broader compatibility. Please refer to the following C# code example, highlighting PSD to PNG conversion:
string sourceFile = Path.Combine(baseFolder, "1966source.psd");
string outputPng = Path.Combine(outputFolder, "output.png");
using (var psdImage = (PsdImage)Image.Load(sourceFile, new PsdLoadOptions() { LoadEffectsResource = true }))
{
psdImage.Save(outputPng, new PngOptions());
}
Source*
You can view the list of all new features, enhancements, and bug fixes introduced in this release by visiting Aspose.PSD for .NET 24.4 Release Notes.