------------------------------ XJT Fileformat specification: ------------------------------ (XJT 1.1.16b, 2000.02.05) unit (XJT 1.1.15b, 2000.01.30) paths (XJT 1.1.15a, 2000.01.23) (XJT 1.1, 1998.10.31 - 1999.03.16) XJT Fileformat was designed to save compressed GIMP Images with all the properties that are available in GIMP. XJT uses JPEG compression foreach layer or channel and TAR to collect all layers in one file. (Layers with alphachannels are splitted into 2 jpeg files) Additional property informations about offsets, opacity, layernames etc.. are stored in the readable textfile called "PRP" (Properties) The resulting tar-file is optionaly compressed a 2.nd time using GZIP or BZIP2. (depends on the filename ending "gz" or "bz2") Filename Extensions are: image.xjt # plain tar file image.xjtgz # gzip compressed tar file image.xjbz2 # bzip2 compressed tar file Restrictions: ------------- ** XJT does not support INDEXED Images. ** Why should anyone use the new XJT Fileformat ? --------------------------------------------- XJT Advantages: - The high JPEG compression rates (1:10 and more) helps to save a lot of Diskspace. (especially if you are using GIMP and GAP to store many images as AnimFrames ) - Saved image keeps all layers channels and properties - single Layers can be extracted using tar and then be accessed by many other jpeg-compatible programs. XJT Disadvantages: - JPEG is a lossy compression. After save and load the bitmapdata differs a little from the original, depending on the used quality setting. ==> use GIMP's native xcf format where you need exactly the original. Example: ________ Example of PRP file: -------------------- GIMP_XJ_IMAGE ver:"1.0" w/h:256,256 L0 acl fsl pt o:35,116 n:"Pasted Layer" L1 ln pt aml eml o:0,7 n:"Pasted Layer" m1 smc o:0,7 n:"Pasted Layer mask" l2 fa n:"Background" c0 op:33.725 iv smc c:255,0,0 n:"saved selection mask" TAR Contents of the example file -------------------------------- >tar -tvf example.xjt -rw-r--r-- hof/users 228 Nov 1 11:19 1998 PRP -rw-r--r-- hof/users 2352 Nov 1 11:19 1998 c0.jpg -rw-r--r-- hof/users 3789 Nov 1 11:19 1998 l0.jpg -rw-r--r-- hof/users 8569 Nov 1 11:19 1998 l1.jpg -rw-r--r-- hof/users 9098 Nov 1 11:19 1998 l2.jpg -rw-r--r-- hof/users 3926 Nov 1 11:19 1998 la0.jpg -rw-r--r-- hof/users 6095 Nov 1 11:19 1998 la1.jpg -rw-r--r-- hof/users 1623 Nov 1 11:19 1998 lm1.jpg The example image has dimensions of 256x256 pixels. The Image Type is RGB (default Property typ:0) L0 The Image has a floating selection (stored as l0.jpg) at offset 35/116. The floating selection has an alpha channel (stored in la0.jpg) The floating selection is the active Layer. There are 2 further Layers. L1 at offset 077 is named "Pasted Layer" and is stored in l1.jpg. This Layer has both an alpha channel (stored in la1.jpg) and a LayerMask (stored in lm1.jpg) (the Properties of the LayerMask are stored in an extra Line of the PRP file beginning with m1) l2 is the Background Layer without alpha channel. (stored in l2.jpg) The Floating selection is attached to this layer ("fa" Property) c0 The image has one extra channel named "saved selection mask" This channel has full red color (c:255,0,0 property) and an opacity value of 33.725 % but is invisible ("iv" property) Syntax of the PRP -file ----------------------- Image Properties (must be the 1. line in the PRP file) ================ The line starts with GIMP_XJ_IMAGE Image-fileformat-Identifier followed by a List of Image properties seperated by Blank: PROP_VERSION PROP_GIMP_VERSION PROP_DIMENSION PROP_RESOLUTION PROP_UNIT PROP_TYPE PROP_GUIDES (can occure more than 1 time) PROP_PARASITES (can occure more than 1 time) Layer Properties: ================= The line starts with l Layer description of layer without alpha channel. the layers bitmapdata is stored in a jpeg encoded file named l.jpg L Layer description of layer with alpha channel. the layers bitmapdata is stored in a jpeg encoded file named l.jpg, the alpha channel is stored in an additional jpeg encoded file named la.jpg, followed by a List of Layer properties seperated by Blank: (properties for the default values are not written) PROP_ACTIVE_LAYER PROP_FLOATING_SELECTION PROP_FLOATING_ATTACHED PROP_OPACITY PROP_MODE PROP_VISIBLE PROP_LINKED PROP_PRESERVE_TRANSPARENCY PROP_APPLY_MASK PROP_EDIT_MASK PROP_SHOW_MASK PROP_OFFSETS PROP_TATTOO PROP_PARASITES (can occure more than 1 time) PROP_NAME Channel Properties: =================== The line starts with c Channel description of channel . the channels bitmapdata is stored in a jpeg encoded file named c.jpg m Layermask-channel of layer the layermask-channels bitmapdata is tored in a jpeg encoded file named c.jpg followed by a List of Channel properties seperated by Blank: (properties for the default values are not written) PROP_ACTIVE_CHANNEL PROP_SELECTION PROP_FLOATING_ATTACHED PROP_OPACITY PROP_VISIBLE PROP_SHOW_MASKED PROP_COLOR PROP_TATTOO PROP_PARASITES (can occure more than 1 time) PROP_NAME Parasite Properties: ==================== The line starts with p Parasite description of parasite . the parasite data is stored 1:1 in a file named p.pte followed by a List of Parasite properties seperated by Blank: (properties for the default values are not written) PROP_NAME PROP_PARASITE_FLAGS Path Properties: ==================== The line starts with PATH Path identstring. the parasite data is stored 1:1 in a file named p.pte followed by a List of Path properties seperated by Blank: (properties for the default values are not written) PROP_NAME PROP_PATH_TYPE PROP_PATH_CURRENT PROP_PATH_LOCKED PROP_TATTOO PROP_PATH_POINT -------------------------- Properties Summary -------------------------- Property types: -------------------------- PTYP_BOOLEAN mnemonic PTYP_INT mnemonic:int_value PTYP_2xINT mnemonic:int_value,int_value PTYP_3xINT mnemonic:int_value,int_value,int_value PTYP_FLT mnemonic:float_value PTYP_2xFLT mnemonic:float_value,float_value PTYP_FLIST mnemonic:float_value[,float_value ...] xjt uses max 5 digits behind the comma. precision of max 5 digits 17.00000999 is truncated to 17 2.00001999 is truncated to 2.00001 PTYP_STRING mnemonic:"string_value" If a String contains DoublleQuote Backslash or newline Characters, they are escaped by a preceeding Backslash character. Example: the text: hello "quotes" and \backslash is encoded as: n:"hello \"quotes\" and \\backslash" Properties are written as short mnemonics (1 upto 3 characters) to identify the Property. Non-boolean Property-mnemonics require a Value seperated by ':'. For each property there is a defined Defaultvalue. (usually 0, or "" for strings) The Defaultvalue is assumed when the Token is not specified, Boolean tokens default always to FALSE and become TRUE when specified. /* property mnemonic type default values */ PROP_END, "*", PTYP_NOT_SUPPORTED, 0, PROP_COLORMAP, "*", PTYP_NOT_SUPPORTED, 0, PROP_ACTIVE_LAYER, "acl", PTYP_BOOLEAN, FALSE, PROP_ACTIVE_CHANNEL, "acc", PTYP_BOOLEAN, FALSE, PROP_SELECTION, "sel", PTYP_BOOLEAN, FALSE, PROP_FLOATING_SELECTION, "fsl", PTYP_BOOLEAN, FALSE, PROP_OPACITY, "op", PTYP_FLT, 100.0, PROP_MODE, "md", PTYP_INT, 0, PROP_VISIBLE, "iv", PTYP_BOOLEAN, FALSE, PROP_LINKED, "ln", PTYP_BOOLEAN, FALSE, PROP_PRESERVE_TRANSPARENCY, "pt", PTYP_BOOLEAN, FALSE, PROP_APPLY_MASK, "aml", PTYP_BOOLEAN, FALSE, PROP_EDIT_MASK, "eml", PTYP_BOOLEAN, FALSE, PROP_SHOW_MASK, "sml", PTYP_BOOLEAN, FALSE, PROP_SHOW_MASKED, "smc", PTYP_BOOLEAN, FALSE, PROP_OFFSETS, "o", PTYP_2xINT, 0, 0, PROP_COLOR, "c", PTYP_3xINT, 0, 0, 0, PROP_COMPRESSION, "*", PTYP_NOT_SUPPORTED, 0, PROP_GUIDES, "g", PTYP_2xINT, 0, 0, PROP_RESOLUTION, "res", PTYP_2xFLT, 72.0, 72.0, PROP_UNIT, "unt", PTYP_INT, 0, /* XJT_UNIT_PIXEL */ PROP_TATTOO, "tto", PTYP_INT, 0, PROP_PARASITES, "pte", PTYP_INT, 0, PROP_PARASITE_FLAGS, "ptf", PTYP_INT, 1, /* PARASITE_PERSISTENT */ PROP_FLOATING_ATTACHED, "fa", PTYP_BOOLEAN, FALSE, PROP_NAME, "n", PTYP_STRING, "", PROP_DIMENSION, "w/h", PTYP_2xINT, 0, 0, PROP_TYPE, "typ", PTYP_INT, 0, PROP_VERSION, "ver", PTYP_STRING, 0, PROP_GIMP_VERSION, "gimp", PTYP_3xINT, 0, PROP_PATH_POINT, "php", PTYP_FLIST, 0.0, 0.0, 0.0 PROP_PATH_TYPE, "pht", PTYP_INT, 1, /* XJT_BEZIER_PATH */ PROP_PATH_CURRENT, "pha", PTYP_BOOLEAN, FALSE, PROP_PATH_LOCKED, "phl", PTYP_BOOLEAN, FALSE, Property Values (Valid Ranges) ------------------------------ PROP_OPACITY valid values are 0.0 (full transparent) upto 100.0 (full opaque) PROP_TYPE valid values are: 0 ... XJT_RGB 1 ... XJT_GRAY PROP_MODE valid values are: 0 ... XJT_NORMAL_MODE 1 ... XJT_DISSOLVE_MODE 2 ... XJT_BEHIND_MODE 3 ... XJT_MULTIPLY_MODE 4 ... XJT_SCREEN_MODE 5 ... XJT_OVERLAY_MODE 6 ... XJT_DIFFERENCE_MODE 7 ... XJT_ADDITION_MODE 8 ... XJT_SUBTRACT_MODE 9 ... XJT_DARKEN_ONLY_MODE 10 ... XJT_LIGHTEN_ONLY_MODE 11 ... XJT_HUE_MODE 12 ... XJT_SATURATION_MODE 13 ... XJT_COLOR_MODE 14 ... XJT_VALUE_MODE 15 ... XJT_DIVIDE_MODE PROP_GUIDES valid values for the 1.st integer are positve integers, representing x or y position (depends on the 2.nd value) valid values for the 2.nd integer are: 0 ... XJT_ORIENTATION_HORIZONTAL 1 ... XJT_ORIENTATION_VERTICAL Note: in older xjt files (older than xjt version 1.1.15) there was no exact specification and the gimp internal representation of the guide orientation was written to the xjt guide orientation property. Unforunately this gimp internal representation has changed PROP_PATH_TYPE valid values are: 1 ... XJT_BEZIER_PATH PROP_PATH_POINT This property is a list of float values. For Paths of the type XJT_BEZIER_PATH each point is represented by a float value triplet x,y,type where type can be 1 (BEZIER_ANCHOR point) or 2 (BEZIER_CONTROL point) PROP_UNIT valid values are: 0 ... XJT_UNIT_PIXEL 1 ... XJT_UNIT_INCH 2 ... XJT_UNIT_MM 3 ... XJT_UNIT_POINT 4 ... XJT_UNIT_PICA ------------------------------- Extended Example of PRP file: ------------------------------- PARASITES: The parasite data is stored in a seperate file for each parasite. The file is named p.pte, where is a unique integer parasite Id. A Layer, Channel or Image can have 0 or more PROP_PARASITE Properties (pte:1 pte:2 ...), where the integer parameter refers to the unique parasite id. Example of PRP file with resolution, parasites and paths: ------------------------------------------------------------- GIMP_XJ_IMAGE ver:"1.1" w/h:256,256 res:72.0,100.5 pte:1 PATH n:"Path 1" php:103,65,1,103,65,2,176,15,2,177,15,1,178,15,2,198,229,2,198,229,1,198,229,2 L0 acl fsl pt o:35,116 n:"Pasted Layer" L1 ln pt aml eml o:0,7 n:"Pasted Layer" pte:2 pte:3 m1 smc o:0,7 n:"Pasted Layer mask" l2 fa n:"Background" c0 op:33.725 iv smc c:255,0,0 n:"saved selection mask" pte:4 p1 n:"image parasite" p2 n:"layer parasite A" p3 n:"layer parasite B" p4 n:"channel parasite" TAR Contents of the example file -------------------------------- >tar -tvf example.xjt -rw-r--r-- hof/users 228 Nov 1 11:19 1998 PRP -rw-r--r-- hof/users 2352 Nov 1 11:19 1998 c0.jpg -rw-r--r-- hof/users 3789 Nov 1 11:19 1998 l0.jpg -rw-r--r-- hof/users 8569 Nov 1 11:19 1998 l1.jpg -rw-r--r-- hof/users 9098 Nov 1 11:19 1998 l2.jpg -rw-r--r-- hof/users 3926 Nov 1 11:19 1998 la0.jpg -rw-r--r-- hof/users 6095 Nov 1 11:19 1998 la1.jpg -rw-r--r-- hof/users 1623 Nov 1 11:19 1998 lm1.jpg p1.pte p2.pte p3.pte p4.pte