Also Known As: AI, Adobe AI
Type | Metafile |
Colors | Unlimited |
Compression | None |
Maximum Image Size | NA |
Multiple Images Per File | Yes |
Numerical Format | ASCII |
Originator | Adobe |
Platform | Macintosh, MS Windows, NeXT |
Supporting Applications | Adobe Illustrator, most desktop publishing packages, most drawing packages, Adobe Streamline |
See Also | CGM |
Usage
Storage and interchange of line-based artwork.
Comments
A widely used format for the exchange of 2D
objects. Basic files are simple to write. Unfortunately, files
created by applications implementing the full
AI specification can be large and complex and
may be slow to render.
Vendor specifications are available for this format.
Originally written for the Macintosh platform, Adobe Illustrator is a well-known and widely used drawing application. There are currently Macintosh, Microsoft Windows, and NeXT versions. Much of the power of Adobe Illustrator comes from its implementation of Bezier splines as drawing objects, and the fact that it presents a simple user interface for precise positioning of spline-based drawing objects. Bezier splines have some advantages for the modeling of natural (and some human-made) objects. AI files are also used to distribute clip art.
Contents:
File Organization
File Details
For Further Information
The AI format encapsulates and formalizes a subset of the PostScript page description language (PDL) in a structured file. Such files are meant to be imaged on a PostScript printer, but may include a bitmap version of the image to facilitate screen preview. PostScript is a powerful and complex language in its full implementation, and this complexity is partly due to its ability to specify almost anything that can appear on a 2D output device. AI, however, is tailored to the storage of graphics data in the conventional sense: drawings, artwork, and lettering used for ornamental and display purposes. Note that AI files can still be quite complex. PostScript derives much of its power from the ability to define sequences of operations and to later concatenate them using a simple syntax. This hidden complexity is sometimes, but not always, minimized in AI files.
Simple AI files are quite easy to construct, and an application can create files that can be read by any AI reader or can be printed on any PostScript printer. Reading AI files is another matter entirely. Certain operations may be difficult for a rendering application to implement or simulate. In light of this, developers often choose not to render the image from the PostScript-subset line data in the file. Note, however, that almost all of the image can usually be reconstructed using simple operations. If you wish to develop an AI reader, it can be done, and you can get hints by examining the source code of the GNU GhostScript system, which provides a nearly full implementation of the PostScript language.
PostScript, and consequently the AI subset, has its own language and conventions. We suggest that you read the PostScript documents prior to working with AI files or perusing the specification document included on the CD-ROM. These are referenced at the end of this article.
AI files consist of a series of ASCII lines, which may be comments, data, commands, or combinations of commands and data. Commands in AI files are operators, which may or may not be followed by data. Data is pushed and popped off a stack, and operators use data on the stack in LIFO order. PostScript is sometimes thought of as a stream-oriented PDL. Lines, however, must be parsed first as full lines and then tokenized. Operator lines usually have the following form:
arg-list operator
Key concepts are path, stroke, fill, and the graphics state. A path is traveled by a graphics cursor. Stroking results in a path or portion of a path eventually being displayed on the rendering surface. Fills operate on closed paths. The results of stroking and what actually happens during a fill operation (among other things) are determined by the graphics state.
Comments are any line where the first non-whitespace character is %. Special lines, known as structuring comments, are designated by the double-comment %%. A + immediately after a structuring comment designator indicates that the data on the line is associated with the previous structuring comment.
In the discussion that follows, llx, lly, urx, and ury refer to lower-left x, lower-left y, upper-right x, and upper-right y, respectively. These are used to denote bounding box rectangles and are similar to how rectangles were specified in the original Macintosh development environment. This can cause problems in other systems because many objects are oriented relative to their bounding boxes. Developers in other environments should consider themselves forewarned.
AI files are organized as follows: a file ID line, followed by a header, followed by the rest of the file in which the graphics objects are defined. In Adobe terminology, the header consists of structuring and other comments known as the Prolog. Following the header is a Script Setup section, which consists of the drawing commands defining the objects in the image, a section called the Page Trailer, and a section called the Document Trailer. Files are terminated with the structuring comment %%EOF, signaling to the rendering application or device that the data associated with the image to be rendered is complete.
ID line |
Prolog |
Comments |
Script Setup |
Objects |
Page Trailer |
Document Trailer |
All AI files start with a comment line in the following format:
%!PS-Adobe-X.X EPSF-Y.Y
where X.X and Y.Y are the AI and EPSF (format or the encapsulated bitmap), respectively. Remember that your reader must examine and tokenize the first line, whether or not it is a comment, in order to identify the file.
This is followed by a series of structuring and other Adobe-defined comments and a host of procedure sets that make up the header.
%File ID line %%BeginProlog . . list of header comments . %%EndComments . . list of procedure set definitions . %%EndProlog
A typical header appears as follows:
%%BeginProlog %%Creator: Adobe Illustrator 4.0 %%For: John Doe Xylane University %%Title: Figure 1.1 %%CreationDate: 12-13-95 03:43:15 %%BoundingBox: 0 0 512 512 %%EndComments %%DocumentSuppliedResources: procset AdobeCustomColor Red123 3 0 %%EndProlog
Note that Adobe Illustrator can save files locally in a "no-header" version, in which case much of this information--except for the file ID line and the BoundingBox comment--will be absent. Files saved by Adobe Illustrator for export will generally contain more extensive header information. Adobe advises that a document in the following format is the mimimum acceptable for reading by Adobe Illustrator:
%!PS-Adobe-3.0 %%BoundingBox llx lly urx ury %%EndComments %%EndProlog %%BeginSetup . . font encoding . . . pattern definitions . %%EndSetup . . object definition . %%Trailer %%EOF
Some structuring comments are used only in the header. Others appear later in the file.
The Microsoft Windows version of Adobe Illustrator (v4.0) uses the following structuring comments:
%%Creator: Adobe Illustrator(TM) version %%For: user, organization %%Title: title %%CreationDate: date, time %%DocumentProcSets: Adobe_Illustrator_version level revision %%DocumentSuppliedProcsets: Adobe_Illustrator_version level revision %%DocumentFonts: fonts %%BoundingBox: llx lly urx ury %%TemplateBox: llx lly urx ury %%Template: filename %%PageOrigin: x y %%PrinterName: printer %%PrinterRect: llx lly urx ury
These last four comments are normally stored in the resource fork in the Macintosh environment.
The following are comments used in the header. Most are optional, and some are Macintosh-specific and are ignored on other platforms.
%%BeginProlog %%BoundingBox: llx lly urx ury Integers %%CMYKCustomColors: custom-color-name %%CreationDate: date time Valid PostScript strings %%Creator: name version Program used to create file %%DocumentCustomColors: custom-color Color defined in file %%DocumentFiles: file-to-import %%DocumentFonts: font-name Font used in image %%DocumentNeededResources: other-resourcesNeeded to reconstruct image %%DocumentProcessColors: colorsColors in color model definition %%EndComments %%EndProlog %%EOF %%For: name Optional info %%IncludeResource: name Misc necessary to reconstruct image %%Title: name Name of image
Procedure set definitions start with the DocumentSuppliedResources keyword, and are followed by the keyword procset and a list of arguments consisting of one or more of the following:
Adobe_cmykcolor |
Adobe_cshow |
Adobe_customcolor |
Adobe_Illustrator_AI3 |
Adobe_packedarray |
Adobe_pattern_AI3 |
Adobe_typography_AI3 |
These are followed by the version and revision numbers, as shown in the following example:
DocumentSuppliedResources: procset Adobe_cshow 3 4
This is the case for all but Adobe_customcolor, which adds the color name and has the following syntax:
DocumentSuppliedResources: procset Adobe_customcolor Red123 3 4
Note that among the structuring comments, only BoundingBox must be included in every AI file and helps denote the size and scale of the image.
The following header comments may be optionally included between the BeginProlog and EndProlog statements in the header, at the end of the rest of the header comments.
%AI3_ColorUsage: Black&White or Color %AI3_TemplateBox: llx lly urx ury %AI3_TemplateFile: vol::dir id:name %AI3_TileBox: llx lly urx ury Mac-specific
The Script Setup section of the file consists of setup information, a list of object definitions, and the page and document trailers.
The setup portion of this section has the following format:
%%BeginSetup %%IncludeFont: font . . procedure set initialization . . . font encoding . . . pattern definitions . %%EndSetup
The font specified on the IncludeFont line is one used in the document and should be substituted for if the correct font is unavailable to the rendering application. Procedure sets defined in the prolog often need to be initialized and are deinitialized (or terminated) later in the file. Font encoding is the process of mapping ASCII codes to glyphs found in the font file. We won't attempt to explain font encoding here, and instead we refer you to the PostScript references at the end of this article. Note, however, that the TE and TZ operators are used to specify font encoding in this section of the file.
Patterns are also defined in this section and are meant to be used one or more times in the file. Pattern definitions have the following syntax:
%%BeginPattern: pattern-name llx lly urx ury layer-list E %%EndPattern
Patterns are actually miniature drawings and can have the full complexity of full-sized, multi-layered images. For this reason we refer you to the format specification for further information.
Following the setup portion of the Script Setup section is the script body, consisting of object definitions. These generally form the bulk of the file and can often be parsed and rendered to give a good approximation of the image, particularly in files produced by applications other than Adobe Illustrator.
Preceding each object is a flag, denoted by flag A. If A is set, then the object is considered locked (non-editable) in Adobe Illustrator. Objects may be one of the following:
path | placed art |
path mask | subscriber |
composite | graph |
text | PostScript document |
In the discussion below, we only describe path objects, placed art objects, subscriber objects, and graph objects in detail. Please consult the AI format document and PostScript specification for further information on composite and text objects. Note that the graph terminology in particular only makes sense with a copy of the Adobe Illustrator application documentation in hand.
Path objects are defined by specifying paint style, path geometry, and path render.
Path paint style is specified by setting the current graphics state. Note that the graphics state can be saved temporarily and restored. The most important of the state arguments are the following:
Argument | Operator | Meaning |
---|---|---|
array phase |
d |
Sets dash pattern using array |
flatness |
i |
Bezier path flattening (0-100) |
flag |
D |
Winding order (0=clockwise) |
linecap |
J |
0=butted, 1=round, 2=square |
linejoin |
j |
0=mitered, 1=round, 2=beveled |
linewidth |
w |
Width of line (minimum 0) |
miterlimit |
M |
Adjusts mitering (>1) |
Path geometry is specified using the following syntax:
Argument | Operator | Meaning |
---|---|---|
x y |
m |
moveto |
x y |
l |
lineto |
x y |
L |
lineto corner |
x1 y1 x2 y2 x3 y3 |
c |
curveto--append Bezier to path |
x1 y1 x2 y2 x3 y3 |
C |
curveto corner |
x2 y2 x3 y3 |
v |
Insert Bezier starting with current point |
x2 y2 x3 y3 |
V |
Insert Bezier to corner |
x1 y1 x3 y3 |
y |
Append Bezier to current and finish with x3,y3 |
x1 y1 x3 y3 |
Y |
Append Bezier to current to corner |
Paths can be rendered using the following operators:
Argument | Operator | Meaning |
---|---|---|
NA |
N |
Leaves unclosed, unfilled, unstroked path |
NA |
n |
Leaves closed, unfilled, unstroked path |
NA |
F |
Fills path, leaving it unclosed |
NA |
f |
Fills path, closing it |
NA |
S |
Strokes path with current default values |
NA |
s |
Closes path and strokes with current defaults |
NA |
B |
Leaves unclosed, but fills and strokes path |
NA |
b |
Leaves closed, filled, stroked path |
Placed art objects are EPS files included in an AI file. They can be included either by reference (to an external file) or inline. Both types of included files begin with the single-quote (') operator and end with a tilde (~) operator. Between these is the %%IncludeFile: comment for externally referenced files, or a %%BeginDocument and %%EndDocument pair for inline files. The ' operator has the following syntax:
a b c d tx ty llx lly urx ury filename '
Arguments a, b, c, d, tx, and ty are optional and specify the transformation matrix for the file to be included. Arguments llx, lly, urx, and ury specify the bounding box of the included file. Argument filename is the full pathname of the included file.
Externally referenced files:
a b c d tx ty llx lly urx ury filename ' %%IncludeFile: filename ~
Inline files:
a b c d tx ty llx lly urx ury filename ' %%BeginDocument: filename . . included file contents . %%EndDocument ~
Macintosh systems may include references to subscriber objects, associated with the the publish and subscribe feature available in System 7. These are indicated by the %%subscriber comment:
%AI3_Subscriber: res-number placed art object
where res-number is the resource number of the SECT resource in the file, and the placed art object is as described above.
Graph objects are used to specify graphs for business, technical, and scientific purposes. A number of commands allow full control over labeled illustrations, including the placement and appearance of the following (Adobe-defined) parts. Many details of these commands make sense only in the Adobe Illustrator environment:
axes | legend group |
label group | data column |
axis tick | series 0 |
category axis group | series 1 |
edge |
Argument | Operator | Meaning |
---|---|---|
NA |
Gs |
Start of graph object |
NA |
GS |
End of graph object |
l t r b |
Gb |
Graph bound (left,top,right,bottom) |
(see spec) |
Gy |
Values in Graph Style dialog box |
(see spec) |
Gd |
Values in Graph Style dialog box |
axis string |
Ga |
Axis: 1=bottom, 2=left, 3=right |
(see spec) |
GA |
Axis specs |
r c fr fc |
Gz |
Cell table: rows, columns, first row, first column |
cv1, cv2...cvx |
Gc |
Reads cell values 1-x into table |
cw1, cw2...cwx num |
Gw |
Column widths 1-x, num=number of columns |
NA |
GC |
Cell table is complete |
NA |
Gt |
Start graph customizations |
NA |
GT |
End graph customizations |
target cust |
Gx |
Target, customization (see below) |
cust |
Gp |
General Illustrator customization (see below) |
method |
G+ |
Change method: 0=reset to new, 1=add new to previous |
direction |
G1 |
0=send to back, 1=send to front |
df ds fcs scs m |
Gf |
doFill, doStroke, fillStyle, strokeStyle, isAMask (see below) |
column |
Gl |
Column index for table |
row |
Gr |
Row index for table |
axis |
Gi |
Which axis object is inside: 1=bottom, 2=left, 4=right, 8=top |
(see below) |
Gm |
Matrix customizations |
(see below) |
GD |
Bar design customizations |
repeat |
Ge |
Repeat bar design |
tickvalue |
Gv |
Numeric value corresponding to customized tick mark |
NA |
GX |
End of customization |
target col row axis |
Go |
Type of graph object just read in (see below) |
Gx graph customizations hold information about current defaults. The target parameter is one of the following:
0 |
Entire graph |
1 |
All series and legend marks |
2 |
One series and legend marks |
3 |
One series but no legend |
4 |
One data bar, line, or wedge |
5 |
All data marks |
6 |
One series and legend marks |
7 |
One series but no legend marks |
8 |
One data line segment's marks |
9 |
One axis, complete |
10 |
Category axis main line |
11 |
One axis major tick mark |
12 |
One axis single major tick mark |
13 |
One axis set of tick labels |
14 |
One axis single tick label |
15 |
All legend text |
16 |
One legend text |
17 |
One numerical axis main line |
18 |
One legend's box or line but no mark |
19 |
One legend's mark |
20 |
All labels along one category axis |
21 |
One label of category axis |
22 |
Entire shadow event |
23 |
Every tick of one axis |
24 |
All minor ticks one axis |
25 |
One minor tick one axis |
The customization argument is one of the following:
0 |
Illustrator Customization |
1 |
Set Series Graph Style |
2 |
Set Column (Bar) Design |
3 |
Set Mark Design |
Gp customizations may be one of the following:
0 |
Move/Shear/Rotate/Scale |
1 |
Set Paint Style |
9 |
Send to Front/Back |
11 |
Set Layout Style |
The Gf operator allows the setting of Set Paint Style customization. The doFill, doStroke, and isAMask operators are flags. Operators fillStyle and strokeStyle may be:
0 |
Black (or white) |
1 |
Process |
2 |
Pattern |
3 |
Custom color |
4 |
Blend (AI for Windows v4.0) |
The Gm operator specifies matrix customizations. Arguments are in the form:
a b c d h v generalGraphType reserved1 reserved2
where a, b, c, d, h, and v are matrix values. Argument generalGraphType specifies the type of graph to apply the customization to:
1 |
Grouped-column and stacked-column |
2 |
Scatter and line graphs |
3 |
Pie charts |
4 |
Area graphs |
5 |
All graphs |
Arguments reserved1 and reserved2 are set to 0.
The GD operator has the following form:
designName designType repeatPartialType rotateLegend GD
where designName is a name (string), and designType can be:
6 |
Vertically scaled design |
7 |
Uniformly scaled design |
8 |
Repeating design |
9 |
Sliding design |
Argument rotateLegend is a flag that when set indicates the legend in the design box is rotated. Argument repeatPartialType can be:
16 |
Chop partial values |
17 |
Scale partial values |
The target argument that is associated with operator Go can have the following values:
1 |
All series with legends |
2 |
One series, including legends |
4 |
One data bar, line, or wedge |
5 |
All data marks |
6 |
One series and its legend marks |
8 |
One data line segment's marks |
9 |
One axis, including text, ticks, line |
10 |
Category axis main line |
15 |
All legend text |
20 |
All labels along category axis |
22 |
Entire shadow object |
The Script Trailer has the following syntax:
%%Trailer . . procedure set termination .
The procedure set terminations section consists of an explicit list of procedure set termination commands, in the reverse order from those specified in the script setup section. An example of a procedure set termination is as follows:
Adobe_customcolor /terminate get exec
Much of the information for this article came from the following document:
Adobe Illustrator File Format Specification, Adobe Developer Support Version 3.0 (Draft), 28 October 1992.
The specification is included on the CD-ROM. This is described as a draft, even though it has been relatively stable since 1989.
You may also contact Adobe at the following address:
Adobe Systems
Developer Support
1585 Charleston Rd.
P.O. Box 7900
Mountain View CA 94039-7900
Voice: 415-961-4400
Voice: 800-344-8335
FAX: 415-961-3769
Adobe also provides a great deal of information online, and is to be congratulated for their willingness to aid developers:
http://www.adobe.com/
ftp://ftp.adobe.com/
Adobe's PostScript documentation is widely available, and is required reading for anyone working with AI files, and is a model of coherence and lucidity; it was published in a set of books in conjunction with Addison-Wesley. Among the books are a tutorial on PostScript programming and the Type 1 font specification. They are available at most computer bookstores. The most important document for understanding the AI format is:
PostScript Language Reference Manual, second edition, Addison-Wesley, Reading, MA. (ISBN 0-201-18127-4)
Copyright © 1996, 1994 O'Reilly & Associates, Inc. All Rights Reserved.