AI (Adobe Illustrator) format

AI, Adobe Illustrator Artwork, represents single-page vector-based drawings in either the EPS or PDF formats.

The structure of an AI file depends on its version.

Aspose.PSD supports following AI versions at the moment (Full support of AI is in the product roadmap):

  • AI version 3
  • AI version 8

You can export an AI file of the supported version to any supported by Aspose.PSD format. For example, you can export AI file programmatically to Psd, Png, Jpeg, Gif, Bmp, Tiff file formats

Below provided sample code demonstrates how to export the AI file to PSD with File Format Manipulation API

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
{
@"34992OStroke",
@"rect2_color",
};
for (int i = 0; i < sourcesFiles.Length; i++)
{
string name = sourcesFiles[i];
string sourceFileName = dataDir + name + ".ai";
string outFileName = dataDir + name + ".psd";
using (AiImage image = (AiImage)Image.Load(sourceFileName))
{
ImageOptionsBase options = new PsdOptions();
image.Save(outFileName, options);
}
}

Examples of current export abilities for AI Files


Example Description
todo:image_alt_text

Export of AI file includes the ability

to render Postscript primitives

with different fill and stroke with

any custom weight.

todo:image_alt_text

Rendering of complex paths from AI file

using C# API without Adobe Illustrator

Additional AI manipulating features through file format API


Aspose.PSD provides the ability to manipulate the Layers and Raster Images from AI files. All these features works only with the supported Adobe Illustrator File versions.

Sample code demonstrates how you can manipulate the Raster Images from AI File Section

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
void AssertIsTrue(bool condition, string message)
{
if (!condition)
{
throw new FormatException(message);
}
}
string sourceFile = dataDir + "sample.ai";
using (AiImage image = (AiImage)Image.Load(sourceFile))
{
AiLayerSection layer = image.Layers[0];
AssertIsTrue(layer.RasterImages != null, "RasterImages property should be not null");
AssertIsTrue(layer.RasterImages.Length == 1, "RasterImages property should contain exactly one item");
AiRasterImageSection rasterImage = layer.RasterImages[0];
AssertIsTrue(rasterImage.Pixels != null, "rasterImage.Pixels property should be not null");
AssertIsTrue(rasterImage.Pixels.Length == 100, "rasterImage.Pixels property should contain exactly 100 items");
AssertIsTrue((uint)rasterImage.Pixels[99] == 0xFFB21616, "rasterImage.Pixels[99] should be 0xFFB21616");
AssertIsTrue((uint)rasterImage.Pixels[19] == 0xFF00FF00, "rasterImage.Pixels[19] should be 0xFF00FF00");
AssertIsTrue((uint)rasterImage.Pixels[10] == 0xFF01FD00, "rasterImage.Pixels[10] should be 0xFF01FD00");
AssertIsTrue((uint)rasterImage.Pixels[0] == 0xFF0000FF, "rasterImage.Pixels[0] should be 0xFF0000FF");
AssertIsTrue(Math.Abs(0.999875 - rasterImage.Width) < DefaultTolerance, "rasterImage.Width should be 0.99987");
AssertIsTrue(Math.Abs(0.999875 - rasterImage.Height) < DefaultTolerance, "rasterImage.Height should be 0.99987");
AssertIsTrue(Math.Abs(387 - rasterImage.OffsetX) < DefaultTolerance, "rasterImage.OffsetX should be 387");
AssertIsTrue(Math.Abs(379 - rasterImage.OffsetY) < DefaultTolerance, "rasterImage.OffsetY should be 379");
AssertIsTrue(Math.Abs(0 - rasterImage.Angle) < DefaultTolerance, "rasterImage.Angle should be 0");
AssertIsTrue(Math.Abs(0 - rasterImage.LeftBottomShift) < DefaultTolerance, "rasterImage.LeftBottomShift should be 0");
AssertIsTrue(Math.Abs(0 - rasterImage.ImageRectangle.X) < DefaultTolerance, "rasterImage.ImageRectangle.X should be 0");
AssertIsTrue(Math.Abs(0 - rasterImage.ImageRectangle.Y) < DefaultTolerance, "rasterImage.ImageRectangle.Y should be 0");
AssertIsTrue(Math.Abs(10 - rasterImage.ImageRectangle.Width) < DefaultTolerance, "rasterImage.ImageRectangle.Width should be 10");
AssertIsTrue(Math.Abs(10 - rasterImage.ImageRectangle.Height) < DefaultTolerance, "rasterImage.ImageRectangle.Height should be 10");
}