Roxen WebServer   Roxen/6.2.236-git

Roxen Interactive RXML Help

<gxml></gxml>

Manipulates images in different ways using layers.

It is possible to make much more advanced manipulation using <gtext></gtext> than with for instance <cimg/>. It is possible to pass attributes, such as the alt attribute, to the resulting tag by including them in the gxml tag.

Attributes

url

Instead of generating a <img> return the url to the generated image.

noxml

Don't self close the generated <img>.

filename
filename=string

Works like the filename attribute to <cimg/>.

Timeout

The generated image will by default never expire, but in some circumstances it may be pertinent to limit the time the image and its associated data is kept. Its possible to set an (advisory) timeout on the image data using the following attributes.

unix-time
unix-time=number

Set the base expiry time to this absolute time.

If left out, the other attributes are relative to current time.

years
years=number

Add this number of years to the time this entry is valid.

months
months=number

Add this number of months to the time this entry is valid.

weeks
weeks=number

Add this number of weeks to the time this entry is valid.

days
days=number

Add this number of days to the time this entry is valid.

hours
hours=number

Add this number of hours to the time this entry is valid.

beats
beats=number

Add this number of beats to the time this entry is valid.

minutes
minutes=number

Add this number of minutes to the time this entry is valid.

seconds
seconds=number

Add this number of seconds to the time this entry is valid.

Image cache attributes

format
format={gif, jpeg, png, avs, bmp, hrz, ilbm, pcx, pnm, ps, pvr, tga, tiff, wbf, webp, xbm, xpm} (png)

The format to encode the image to. The formats available are:

AcronymAcronym interpretation

gif

Graphics Interchange Format (might be missing in your roxen)

jpeg

Joint Photography Expert Group image compression

png

Portable Networks Graphics

avs

Advanced Visual Systems Inc. image format

bmp

Windows BitMaP file

hrz

HRZ is (was?) used for amatuer radio slow-scan TV.

ilbm

Interchangeable File Format: interleaved bitmap

pcx

Zsoft PCX file format (PC / DOS)

pnm

Portable AnyMap

ps

Adobe PostScript file

pvr

Pover VR (dreamcast image)

tga

TrueVision Targa (PC / DOS)

tiff

Tag Image File Format

wbf

WAP Bitmap File

webp

WebP image format currently developed by Google.

xbm

XWindows Bitmap File

xpm

XWindows Pixmap File

quant
quant=number (format dependant)

The number of colors to quantizize the image to.

Default for gif is 32(+1 transparent), for most other formats (except black and white) is it unlimited.

Color/alpha attributes

dither
dither={none, random, floyd-steinberg} (none)

Choose the dithering method.

MethodMeaning

none

No dithering is performed at all.

random

Random scatter dither. Not visually pleasing, but it is useful for very high resolution printing.

floyd-steinberg

Error diffusion dithering. Usually the best dithering method.

true-alpha

If present, render a real alpha channel instead of on/off alpha. If the file format only supports on/off alpha, the alpha channel is dithered using a floyd-steinberg dither.

background-color
background-color=color (taken from the page)

The color to render the image against.

opaque-value
opaque-value=percentage (100)

The transparency value to use, 100 is fully opaque, and 0 is fully transparent.

cs-rgb-hsv
cs-rgb-hsv={0, 1} (0)

Perform rgb to hsv colorspace conversion.

gamma
gamma=number (1.0)

Perform gamma adjustment.

cs-grey
cs-grey={0, 1} (0)

Perform rgb to greyscale colorspace conversion.

cs-invert
cs-invert={0, 1} (0)

Invert all colors

cs-hsv-rgb
cs-hsv-rgb={0, 1} (0)

Perform hsv to rgb colorspace conversion.

Transform attributes

rotate-cw
rotate-cw=degree (0)

Rotate the image clock-wise.

rotate-ccw
rotate-ccw=degree (0)

Rotate the image counter clock-wise.

rotate-unit
rotate-unit={rad, deg, ndeg, part} (deg)

Select the unit to use while rotating.

UnitMeaning

rad

Radians

deg

Degrees

ndeg

'New' degrees (400 for each full rotation)

part

0 - 1.0 (1.0 == full rotation)

mirror-x
mirror-x={0, 1} (0)

Mirror the image around the X-axis.

mirror-y
mirror-y={0, 1} (0)

Mirror the image around the Y-axis.

scale
scale=fact (1.0)

Scale fact times. (0.5 -> half size, 2.0 -> double size)

scale
scale=x,y

Scale to the exact size x,y. If either of X or Y is zero, the image is scaled to the specified width or hight, and the value that is zero is scaled in proportion to the other value.

max-width
max-width=xsize

If width is larger than 'xsize', scale width to 'xsize' while keeping aspect.

max-height
max-height=ysize

If height is larger than 'ysize', scale height to 'ysize' while keeping aspect.

span-width
span-width=xsize

If width is larger than 'xsize', scale width to 'xsize' while keeping aspect. If width is smaller than 'xsize', extend width to 'xsize' by filling the new space with current background color.

span-height
span-height=ysize

If height is larger than 'ysize', scale height to 'ysize' while keeping aspect. If height is smaller than 'ysize', extend height to 'ysize' by filling the new space with current background color.

x-offset
x-offset=pixels (0)

Cut n pixels from the beginning of the X scale.

y-offset
y-offset=pixels (0)

Cut n pixels from the beginning of the Y scale.

x-size
x-size=pixels (whole image)

Keep n pixels from the beginning of the X scale.

y-size
y-size=pixels (whole image)

Keep n pixels from the beginning of the Y scale.

crop
crop={x1,y1-x2,y2, auto, guides-cross, guides-region}

Crops the image by using several differen methods. The simplest is to only specify the area to be cropped with x,y-x,y coordinates. By instead selecting "auto" the image will be cropped so that as many pixels as possible with the same color is removed from around the image.

A more advanced cropping method can be used by giving the crop argument "guides-cross". The image will then be cropped around the intersection of two guides inside the image. Guides can be added to e.g. Photoshop and GIMP images. If several guides are present, which ones to use can be selected with the guides-index=x,y attribute, where x and y is the number of the guides. Guides cross cropping is usefull together with max-width and max-height attributes when creating thumb nails.

A combination of guides cross cropping can be used by giving the crop argument "guides-region". In this cropping mode the area enclosed by two horizontal and two vertical guides are saved. Which guides to use is given by the guides-index=x1,y1-x2,y2 attribute, where the x and y parameters are the number of the guides. Guides can also be specified as guides-index=x,y. Then the saved area will be the one enclosed by the buides x,y and x+1,y+1, counting from left and top. Again, combine max-width and max-height makes a good effect, since scaling is performed after cropping.

Format specific attributes

jpeg-quality
jpeg-quality=percentage (75)

Set the quality on the output jpeg image.

jpeg-optimize
jpeg-optimize={0, 1} (1)

If 0, do not generate optimal tables. Somewhat faster, but produces bigger files.

jpeg-progressive=
jpeg-progressive=={0, 1} (0)

Generate progressive jpeg images.

jpeg-smooth
jpeg-smooth=0-100 (0)

Smooth the image while compressing it. This produces smaller files, but might undo the effects of dithering.

bmp-bpp
bmp-bpp=1,4,8,24 (24)

Force this number of bits per pixel for bmp images.

bmp-windows
bmp-windows={0, 1} (1)

Windows or OS/2 mode, default is 1. (windows mode)

bmp-rle
bmp-rle={0, 1} (0)

RLE 'compress' the BMP image.

gd-alpha_index
gd-alpha_index=color (0)

Color in the colormap to make transparent for GD-images with alpha channel.

pcx-raw
pcx-raw={1, 0} (0)

If 1, do not RLE encode the PCX image.

pcx-dpy
pcx-dpy=0-10000000.0 (75.0)

Resolution, in pixels per inch.

pcx-xdpy
pcx-xdpy=0-10000000.0 (75.0)

Resolution, in pixels per inch.

pcx-ydpy
pcx-ydpy=0-10000000.0 (75.0)

Resolution, in pixels per inch.

pcx-xoffset
pcx-xoffset=0-imagexsize-2 (0)

Offset from start of image data to image content for PCX images. Unused by most programs.

pcx-yoffset
pcx-yoffset=0-imageysize-2 (0)

Offset from start of image data to image content for PCX images. Unused by most programs.

tga-raw
tga-raw={1, 0} (0)

If 1, do not RLE encode the Targa image.

ps-dpi
ps-dpi=0-10000000.0 (75.0)

Dots per inch for the resulting postscript file.

Defined in content

&_.layers.{name}.h

Height of layer name.

&_.layers.{name}.l;

Position of the left side of the layer name.

&_.layers.{name}.t;

Position of the top side of the layer name.

&_.layers.{name}.w

Width of the layer name.

<blur/> or <blur></blur>

Blur either the specified layers.

<gxml format='jpg'> <load-image src='/internal-roxen-testimage' /> <move-layer x='&_.layers.Background.w;' absolute=''> <blur> <load-image src='/internal-roxen-testimage' /> </blur> </move-layer> <move-layer x='&_.layers.Background.w;*2' absolute=''> <blur radius='5' times='2'> <load-image src='/internal-roxen-testimage' /> </blur> </move-layer> </gxml>

Attributes

layers
layers=glob

Layer to blur.

layers-id
layers-id=layer-id

Layer to blur.

radius
radius=r (3)

Set radius r for the blur. The default value is optimized and thus significantly faster than the other cases.

times
times=n (1)

Blur the image n number of times.

what
what={image, alpha} (image)

Set what to 'alpha' if you want to blur the alpha channel.

<clear/> or <clear></clear>

Clear layer to a given color.

Attributes

layers
layers=glob

Layer to work on

layers-id
layers-id=layers-id

Layer to work on

what

Whether to work on the alpha channels or image data or both.

color
color=color (black)

Color to clear layer to.

<color/> or <color></color>

Clear layer to a given color.

<gxml format='jpeg'> <color color='#FF0077'> <load-image src='/internal-roxen-testimage' /> </color> </gxml>

Attributes

layers
layers=glob

Layer to work on

layers-id
layers-id=layers-id

Layer to work on

what

Whether to work on the alpha channels or image data or both.

color
color=color (black)

Color to colorize image with.

<color-distance/> or <color-distance></color-distance>

Makes an grey-scale image, for alpha-channel use.

The given value (or current color) is used for coordinates in the color cube. Each resulting pixel is the distance from this point to the source pixel color, in the color cube, squared, rightshifted 8 steps:

p - pixel color o - given color d - destination pixel d.red=d.blue=d.green=((o.red-p.red)²+(o.green-p.green)²+(o.blue-p.blue)²)>>8
<gxml format='jpeg'> <load-image src='/internal-roxen-testimage' /> <text color='white'>Original</text> </gxml> <gxml format='jpeg'> <color-distance color='red'> <load-image src='/internal-roxen-testimage'/> </color-distance> <text color='white'>Red</text> </gxml> <gxml format='jpeg'> <color-distance color='green'> <load-image src='/internal-roxen-testimage' /> </color-distance> <text color='black'>Green</text> </gxml> <gxml format='jpeg'> <color-distance color='blue'> <load-image src='/internal-roxen-testimage' /> </color-distance> <text color='black'>Blue</text> </gxml>

Attributes

layers
layers=glob

Layer to work on

layers-id
layers-id=layers-id

Layer to work on

what

Whether to work on the alpha channels or image data or both.

<coordinate-system></coordinate-system>

Draws a coordinate system that can be used to make your own diagrams.

<gxml format='png' true-alpha='' size='layers(coordinate-system*)'> <new-layer color='white' xsize='32' ysize='32' tiled='1' /> <shadow layers='coordinate-system*' soft='1'> <coordinate-system xsize='700' ysize='500' color='black'> <data> <y start='1.0' end='2.0'> <labels start='1.0' end='2.1' step='0.2' format='%2.1f' font='Haru' fontsize='12' /> <labels start='1.1' end='2.1' step='0.2' format='%2.1f' font='Haru' fontsize='9' /> <ticks start='1.0' end='2.0' step='0.01' width='1' length='6' /> <ticks start='1.0' end='2.0' step='0.1' width='1' length='8' /> <ticks start='1.0' end='2.1' step='0.2' width='2' length='10' /> </y> <x start='1992' end='2001'> <labels start='1992' end='2000' step='1' format='%d' font='Haru' fontsize='12' /> <ticks start='1992' end='2001.1' step='1/12' width='1' length='6' /> <ticks start='1992' end='2001.1' step='1/3' width='1' length='8' /> <ticks start='1992' end='2001.1' step='1' width='2' length='10' /> </x> <frame color='darkred' width='2' /> </data> <shadow soft='3' xoffse='1' yoffset='3'> <line color='orange' xsize='700' ysize='500' width='4' coordinate-system='1992,1.0-2001,2.0'> <c x='1992' y='1.0' /> <c x='1994' y='1.8' /> <c x='2000.5' y='1.2' /> </line> <line color='red' xsize='700' ysize='500' width='4' coordinate-system='1992,1.0-2001,2.0'> <c x='1992' y='1.5' /> <c x='1994' y='1.6' /> <c x='2000.5' y='1.8' /> </line> <line color='darkgreen' xsize='700' ysize='500' width='4' coordinate-system='1992,1.0-2001,2.0'> <c x='1992' y='1.8' /> <c x='1998' y='1.0' /> <c x='2000.5' y='1.8' /> </line> </shadow> <shadow soft='6'> <legend fontsize='12' border='black' bgcolor='white' fgcolor='black' background='100%' square-border='black' font='Haru'> <label color='orange'>Sugar</label> <label color='red'>Spice</label> <label color='darkgreen'>Everything nice</label> </legend> </shadow> </coordinate-system></shadow> </gxml>

Attributes

xsize
xsize=width in pixels
This attribute is required.

Width of the generated image.

ysize
ysize=height in pixels
This attribute is required.

Height of the generated image.

color
color=color (black)

Set the color for coordinate system and its labels.

<gxml> <new-layer color='white' xsize='32' ysize='32' tiled='1' /> <coordinate-system xsize='30' ysize='30'> <data> <y start='0.0' end='2.0'> <labels start='0.0' end='2.0' step='1' fontsize='10' format='%1.1f'/> <ticks start='0.0' end='2.1' step='1' width='1' length='4' /> </y> <x start='0.0' end='2.0'> <labels start='0.0' end='2.0' step='1' fontsize='10' format='%d'/> <ticks start='0.0' end='2.1' step='1' width='1' length='4' /> </x> <frame width='2' /> </data> </coordinate-system> </gxml>

mode
mode=mode (normal)

Sets the mode for the new layer. See <set-layer-mode>.

Defined in content

<data></data>

Used for tags used to describe the coordinate system.

Defined in content
<frame/>

Draw a frame for the coordinate system.

<gxml format='png' true-alpha='1'> <new-layer xsize='32' ysize='32' color='white' tiled='1' /> <coordinate-system xsize='200' ysize='100' transparent='1' > <data> <frame width='1' color='darkblue' /> <y start='1' end='16' /> </data> </coordinate-system> </gxml>

Attributes

width
width=width in pixels (2)

Width of the frame.

color
color=color

Color of the frame.

name
name=name of the layer (coordinate-system.frame)

Name of the new layer that frame is drawn in.

mode
mode=layer mode

Sets the layer mode.

<x></x>

Contains tags about how to draw the x-axis.

Attributes

start
start=number (0)

Start of the x-axis.

end
end=number (1)

End of the x-axis.

Defined in content
<labels/> or <labels></labels>

Labels to put along the x axis. You can either set all your labels yourself in the tag content separated by newlines. The first label will be put at the position of start and then use step to calculate the subsequent positions until end is reached.

If you don't want to explicitly write all your labels yourself then you can use format to automatically generate labels.

<gxml format='png' true-alpha='1'> <new-layer color='white' xsize='32' ysize='32' tiled='1' /> <coordinate-system xsize='400' ysize='300' transparent='1' fontsize='12' font='Haru'> <data> <x start='0' end='6'> <labels start='0.5' end='4.5' step='1' rotate='90'> Hokkaido Nippon Ham Fighters Fukuoka Softbank Hawks Tohoku Rakuten Golden Eagles Saitama Seibu Lions Orix Buffaloes </labels> <labels start='5.5' end='6' step='1' color='red' rotate='90'> Chiba Lotte Marines </labels> </x> <y start='1' end='16'> <labels start='1' end='16' step='1' format='%1.2f' /> </y> <frame width='2' /> </data> </coordinate-system> </gxml>

Attributes

start
start=number
This attribute is required.

The first number in the sequence of labels along the x-axis.

end
end=number
This attribute is required.

The last number in the sequense of labels along the x-axis.

step
step=number
This attribute is required.

How many steps to do between each number.

format
format=sprintf format

This sets how the generated labels should be outputted. It is possible to set how many digits should be used and even if you want the output to be hexadecimal, octal or binary. The format used is the same as used by <sprintf>

This attribute is required if no content is given to <labels>.

<gxml format='png' true-alpha='1'> <new-layer color='white' xsize='32' ysize='32' tiled='1' /> <coordinate-system xsize='500' ysize='200' font='haru' fontsize='10'> <data> <frame width='2' /> <x start='0' end='16'> <labels start='1' end='16' step='1' format='0x%02X' /> </x> <y start='0' end='100'> <labels start='0' end='100' step='20' format='%d %%' /> </y> </data> </coordinate-system> </gxml>

font
font=font

Font to use for the labels.

fontsize
fontsize=fontsize

Fontsize.

rotate
rotate=degree

Rotate the the label this much.

color
color=color

Color of the labels.

<ticks/>

Draw lines that denote the scale. This tag works in much the same way as <labels>.

<gxml format='png' true-alpha='1'> <new-layer color='white' xsize='32' ysize='32' tiled='1'/> <coordinate-system xsize='400' ysize='300' transparent='1'> <data> <x start='0' end='100'> <ticks start='1' end='100' step='1' width='1' length='6' /> <ticks start='10' end='101' step='10' width='2' length='10' /> </x> <y start='1' end='16'> <ticks start='1' end='16' step='1' width='1' length='6' /> </y> <frame width='2' /> </data> </coordinate-system> </gxml>

Attributes

start
start=number
This attribute is required.

The first position to draw a marker on.

end
end=number
This attribute is required.

The last position to draw markers.

step
step=number
This attribute is required.

How many steps between each marker.

width
width=width in pixels
This attribute is required.

Thickness of the marker.

lenght
lenght=lenght in pixels
This attribute is required.

Lenght of the marker.

<y></y>

Contains tags about how to draw the y-axis.

Attributes

start
start=number (0)

Start of the y-axis.

end
end=number (1)

End of the y-axis.

Defined in content
<labels/> or <labels></labels>

Labels to put along the y-axis. This tag works the same as the corresponding tag for <x>.

Attributes

start
start=number
This attribute is required.

The first number in the sequence of labels along the y-axis.

end
end=number
This attribute is required.

The last number in the sequense of labels along the y-axis.

step
step=number
This attribute is required.

How many steps to do between each number.

format
format=sprintf format

This sets how the generated labels should be outputted. It is possible to set how many digits should be used. The format used is the same as used by <sprintf>

This attribute is required if no content is given to <labels>.

font
font=font

Font to use for the labels.

fontsize
fontsize=fontsize

Fontsize.

rotate
rotate=degree

Rotate the the label this much.

color
color=color

Color of the labels.

<ticks/>

Draw lines that denote the scale. This tag works in much the same way as <labels>.

Attributes

start
start=number
This attribute is required.

The first position to draw a marker on.

end
end=number
This attribute is required.

The last position to draw markers.

step
step=number
This attribute is required.

How many steps between each marker.

width
width=width in pixels
This attribute is required.

Thickness of the marker.

lenght
lenght=lenght in pixels
This attribute is required.

Lenght of the marker.

<crop/> or <crop></crop>

Crop the specified layer(s).

<gxml> <crop x='25' y='50' width='100' height='100'> <load-image src='/internal-roxen-testimage' /> </crop> </gxml>

Attributes

layers
layers=glob

Layer to crop.

layers-id
layers-id=layer-id

Layer to crop.

x
x=number
This attribute is required.

How far from the left the layer should be cropped.

y
y=number
This attribute is required.

How far from the top the layer should be cropped.

width
width=number

Width of the cropped layer.

height
height=number

Height of the cropped layer.

<expand/> or <expand></expand>

Expand the layer(s) to the size of the whole image.

Attributes

layers
layers=glob

Layer to expand.

layers-id
layers-id=layers-id

Layers to expand.

<gamma/> or <gamma></gamma>

Adjust the gamma of a layer.

Attributes

layers
layers=glob

Layer to work on

layers-id
layers-id=layers-id

Layer to work on

gamma

what

Whether to work on the alpha channels or image data or both.

<grey/> or <grey></grey>

Make the layer greyscale.

<gxml format='jpeg'> <grey> <load-image src='/internal-roxen-testimage' /> </grey> </gxml>

Attributes

layers
layers=glob

Layer to work on

layers-id
layers-id=layers-id

Layer to work on

what

Whether to work on the alpha channels or image data or both.

<grey-blur/> or <grey-blur></grey-blur>

Same as <blur> but up to three times faster. Works only for greyscale images though.

Attributes

layers
layers=glob

Layer to blur.

layers-id
layers-id=layer-id

Layer to blur.

times
times=number (1)

Number of times to blur the image.

what
what={image, alpha} (image)

Set what to 'alpha' if you want to blur the alpha channel.

<hsv-to-rgb/> or <hsv-to-rgb></hsv-to-rgb>

Convert layer from HSV to RGB color model.
<gxml format='jpg'> <load-image src='/internal-roxen-testimage' /> <text color='white'>Original</text> <move-layer x='&_.layers.Background.w;'> <hsv-to-rgb> <load-image src='/internal-roxen-testimage'/> </hsv-to-rgb> <text color='white'>HSV to RGB</text> </move-layer> <move-layer x='&_.layers.Background.w;*2'> <rgb-to-hsv> <load-image src='/internal-roxen-testimage' /> </rgb-to-hsv> <text color='white'>RGB to HSV</text> </move-layer> </gxml>

Attributes

layers
layers=glob

Layer to work on

layers-id
layers-id=layers-id

Layer to work on

what

Whether to work on the alpha channels or image data or both.

<invert/> or <invert></invert>

Invert the colors and/or alpha of a layer.

<gxml format='jpeg'> <invert> <load-image src='/internal-roxen-testimage' /> </invert> </gxml>

Attributes

layers
layers=glob

Layer to work on

layers-id
layers-id=layers-id

Layer to work on

what

Whether to work on the alpha channels or image data or both.

<legend></legend>

This tag draws a legend which could be useful e.g. when drawing diagrams.

<gxml format='png' true-alpha='1'> <shadow soft='6'> <legend fontsize='12' border='black' bgcolor='white' fgcolor='black' background='100%' square-border='black' font='Haru'> <label color='lightblue'>Mac OS X</label> <label color='red'>Red Hat Enterprise Linux</label> <label color='darkblue'>Solaris</label> <label color='green'>Windows</label> </legend> </shadow> </gxml>

Attributes

columns
columns=positive integer (2)

How many columns to use in the legend.

bgcolor
bgcolor=color (white)

Background color.

fgcolor
fgcolor=color (black)

Text and border color.

font
font=font name

Font to use.

fontsize
fontsize=fontsize

Fontsize.

square-border
square-border=color

Color of the border around each color key in the legend.

border
border=color

Draws a border around the legend in the given color.

background
background=percent

Sets opacity of the legend.

<gxml format='png' true-alpha='1'> <load-image src='/internal-roxen-squares' tiled='1'/> <shadow soft='5' color='white'> <legend fontsize='12' border='black' bgcolor='white' text='black' fgcolor='red' background='60%' font='Haru' > <label color='lightblue'>Mac OS X</label> <label color='red'>Red Hat Enterprise Linux</label> <label color='darkblue'>Solaris</label> <label color='green'>Windows</label> </legend> </shadow> </gxml>

name
name=string (values)

Set this name of the new layer.

Defined in content

<label></label>

Defines a key in the legend.

Attributes

color

Color of the key.

<line></line>

Draws a line, either as a new layer or by modifying the alpha of the given layer(s).

<gxml format='png' true-alpha=''> <shadow soft='10'> <line xsize='152' ysize='127' color='orange' width='3'> <c x='1' y='1' /> <c x='151' y='1' /> <c x='151' y='81' /> <c x='111' y='81' /> <c x='111' y='126' /> <c x='76' y='126' /> <c x='76' y='81' /> <c x='66' y='81' /> <c x='66' y='51' /> <c x='111' y='51' /> <c x='111' y='31' /> <c x='41' y='31' /> <c x='41' y='126' /> <c x='1' y='126' /> <c x='1' y='1' /> </line> <line xsize='152' ysize='127' color='orange' width='3'> <c x='136' y='111' /> <c x='151' y='111' /> <c x='151' y='126' /> <c x='136' y='126' /> <c x='136' y='111' /> </line> </shadow> </gxml>

Attributes

layers
layers=glob

Layer to work on.

layers-id
layers-id=layers-id

Layer to work on.

name
name=string

Name of the new layer, if a new layer is created.

coordinate-system
coordinate-system=x0,y0-x1,y1

Sets up a coordinate system of the same size as the layer it will apply to. This is useful e.g. if you want to draw graphs

<gxml format='png' true-alpha=''> <shadow soft='10'> <line color='red' width='3' xsize='600' ysize='150' coordinate-system='2000,0.0-2010,2.0'> <c x='2000' y='1.2' /> <c x='2001' y='1.8' /> <c x='2002' y='0.8' /> <c x='2003' y='0.003' /> <c x='2004' y='0.3' /> <c x='2005' y='0.5' /> <c x='2006' y='1.0' /> <c x='2007' y='0.8' /> <c x='2008' y='1.3' /> <c x='2009' y='1.8' /> <c x='2010' y='2.7' /> </line> </shadow> </gxml>

xsize
xsize=width in pixels

Width of the new layer, if a new layer is created.

ysize
ysize=height in pixels

Height of the new layer, if a new layer is created.

xoffset
xoffset=px

yoffset
yoffset=px

color
color=color

Color of the new line.

cap
cap={butt, projecting, round} (butt)

Choose which "cap" to use when drawing the line. This will what the ends of the line will look like.

<gxml format='png' true-alpha='1'> <text fontsize='10' x='5' y='3'>Butt:</text> <line xsize='220' ysize='120' width='20' cap='butt' color='red'> <c x='15' y='25' /> <c x='205' y='25' /> </line> <line xsize='220' ysize='120' width='1' color='black'> <c x='15' y='25' /> <c x='205' y='25' /> </line> <text fontsize='10' x='5' y='38'>Projecting:</text> <line xsize='320' ysize='120' width='20' cap='projecting' color='green'> <c x='15' y='60' /> <c x='205' y='60' /> </line> <line xsize='220' ysize='120' width='1' color='black'> <c x='15' y='60' /> <c x='205' y='60' /> </line> <text fontsize='10' x='5' y='73'>Round:</text> <line xsize='220' ysize='120' width='20' cap='round' color='blue'> <c x='15' y='95' /> <c x='205' y='95' /> </line> <line xsize='220' ysize='120' width='1' color='white'> <c x='15' y='95' /> <c x='205' y='95' /> </line> </gxml>

join
join={bevel, miter, round} (miter)

How to join several connected lines.

<gxml format='png' true-alpha='1'> <text fontsize='10' x='5' y='3'>Bevel:</text> <line xsize='80' ysize='80' width='20' join='bevel' cap='round' color='red'> <c x='20' y='30' /> <c x='50' y='30' /> <c x='50' y='60' /> </line> <move-layer x='80' absolute=''> <text fontsize='10' x='5' y='3'>Miter:</text> <line xsize='80' ysize='80' width='20' join='miter' cap='round' color='green'> <c x='20' y='30' /> <c x='50' y='30' /> <c x='50' y='60' /> </line> </move-layer> <move-layer x='160' absolute=''> <text fontsize='10' x='5' y='3'>Round:</text> <line xsize='80' ysize='80' width='20' join='round' cap='round' color='blue'> <c x='20' y='30' /> <c x='50' y='30' /> <c x='50' y='60' /> </line> </move-layer> </gxml>

opacity
opacity=percent

Opacity of the line. Will not be less than base-opacity.

base-opacity
base-opacity=percent

Opacity for the whole layer.

Defined in content

<c/>

Coordinate of a point in the line.

Attributes

x
x=number

y
y=number

<load-image/>

Load an image from disk.

Attributes

src
src=url
This attribute is required.

The path to the indata file.

tile

If the layer which the image is loaded into is larger than the image itself then tile the image.

<mirror-x/> or <mirror-x></mirror-x>

Mirror layer along the X-axis.

Attributes

layers
layers=glob

Layer to work on

layers-id
layers-id=layers-id

Layer to work on

what

Whether to work on the alpha channels or image data or both.

<mirror-y/> or <mirror-y></mirror-y>

Mirror layer along the Y-axis.

Attributes

layers
layers=glob

Layer to work on

layers-id
layers-id=layers-id

Layer to work on

what

Whether to work on the alpha channels or image data or both.

<move-layer/> or <move-layer></move-layer>

Moves the specified layer(s).

Attributes

layers
layers=glob

Layer to be moved.

layers-id
layers-id=layer-id

Layer to be moved.

x
x=number

Move the layer along the x-axis.

y
y=number

Move the layer along the y-axis.

absolute

If this attribute is set then x and y will be absolute coordinates instead of relative.

<new-layer/>

Create a new empty layer.

Attributes

xsize
This attribute is required.

Width of layer.

ysize
This attribute is required.

Height of layer.

color
color=color (black)

transparent

If the layer should be fully transparent. Default is a fully opaque layer.

mode
mode=mode (normal)

Sets the mode for the new layer. See <set-layer-mode>.

<poly></poly>

Creates a polygone, either as a new layer or by modifying the alpha of the given layer(s).

<gxml format='png' true-alpha=''> <shadow soft='10'> <poly layers='*'> <c x='&_.layers.Background.w;/2' y='0' /> <c x='&_.layers.Background.w;' y='&_.layers.Background.h;/2' /> <c x='&_.layers.Background.w;/2' y='&_.layers.Background.h;' /> <c x='0' y='&_.layers.Background.h;/2' /> <load-image src='/internal-roxen-testimage' /> </poly> </shadow> </gxml>

Attributes

layers
layers=glob

Layer to work on.

layers-id
layers-id=layers-id

Layer to work on.

name
name=string

Name of the new layer, if a new layer is created.

coordinate-system
coordinate-system=x0,y0-x1,y1

Sets up a coordinate system of the same size as the layer it will apply to.

<gxml format='png' true-alpha=''> <shadow soft='10'> <poly xsize='150' ysize='115' color='orange' coordinate-system='0,0-3,2.5'> <c x='0' y='2.5' /> <c x='3' y='2.5' /> <c x='3' y='0.9' /> <c x='2.2' y='0.9' /> <c x='2.2' y='0' /> <c x='1.5' y='0' /> <c x='1.5' y='0.9' /> <c x='1.3' y='0.9' /> <c x='1.3' y='1.5' /> <c x='2.2' y='1.5' /> <c x='2.2' y='1.9' /> <c x='0.8' y='1.9' /> <c x='0.8' y='0' /> <c x='0' y='0' /> </poly> <move-layer x='135' y='100'> <poly xsize='15' ysize='15' color='orange' coordinate-system='0,0-1,1'> <c x='0' y='0' /> <c x='1' y='0' /> <c x='1' y='1' /> <c x='0' y='1' /> </poly> </move-layer> </shadow> </gxml>

xsize
xsize=width in pixels

Width of the new layer, if a new layer is created.

ysize
ysize=height in pixels

Height of the new layer, if a new layer is created.

xoffset
xoffset=px

yoffset
yoffset=px

color
color=color

Color of the new polygon.

opacity
opacity=percent

Opacity of the polygon. Will not be less than base-opacity.

base-opacity
base-opacity=percent

Opacity for the whole layer.

Defined in content

<c/>

Coordinate of a vertex in the polygon.

Attributes

x
x=number

y
y=number

<replace-alpha/> or <replace-alpha></replace-alpha>

Replace the alpha channel of the specified layer(s) with either the alpha channel from another layer or a group of layers or a color.

Attributes

layers
layers=glob

Layer to replace alpha.

layers-id
layers-id=layer-id

Layer to replace alpha.

from
from=layer

Layer to copy alpha channel from.

from-id
from-id=layer-id

Layer to copy alpha channel from.

color
color=color

Create alpha channel from the given color in the layer.

<rgb-to-hsv/> or <rgb-to-hsv></rgb-to-hsv>

Convert layer from RGB to HSV color model.
<gxml format='jpg'> <load-image src='/internal-roxen-testimage' /> <text color='white'>Original</text> <move-layer x='&_.layers.Background.w;'> <hsv-to-rgb> <load-image src='/internal-roxen-testimage'/> </hsv-to-rgb> <text color='white'>HSV to RGB</text> </move-layer> <move-layer x='&_.layers.Background.w;*2'> <rgb-to-hsv> <load-image src='/internal-roxen-testimage' /> </rgb-to-hsv> <text color='white'>RGB to HSV</text> </move-layer> </gxml>

Attributes

layers
layers=glob

Layer to work on

layers-id
layers-id=layers-id

Layer to work on

what

Whether to work on the alpha channels or image data or both.

<rotate/> or <rotate></rotate>

Rotate the specified layer(s)

Attributes

layers
layers=glob

Layer to rotate

layers-id
layers-id=layer-id

Layer to rotate

degrees
degrees=degrees
This attribute is required.

Number of degrees to rotate the layer(s)

<scale/> or <scale></scale>

Scale the specified layer(s).

Attributes

layers
layers=glob

Layer to scale.

layers-id
layers-id=layer-id

Layer to scale.

mode
mode={absolute, relative} (absolute)

If mode is set to "relative", the width and height will be given as percentages of the original width and height.

width
width={pixels, percentage}

Set the width of the scaled layer. If height is not set or set to 0, the aspect ratio will be perserved.

height
height={pixels, percentage}

Set the height of the scaled layer. If width is not set or set to 0, the aspect ratio will be perserved.

max-width
max-width=xsize

If height is larger than 'ysize', scale height to 'ysize' while keeping aspect.

max-height
max-height=ysize

If height is larger than 'ysize', scale height to 'ysize' while keeping aspect.

<select-from/> or <select-from></select-from>

Makes an grey-scale image, for alpha-channel use.

This is very close to a floodfill.

<gxml format='png' true-alpha=''> <load-image src='/internal-roxen-testimage' /> <set-layer-mode mode='multiply'> <select-from x='200' y='100' edge-value='150' what='image'> <load-image src='/internal-roxen-testimage' /> </select-from> </set-layer-mode> </gxml>

Attributes

layers
layers=glob

Layer to work on

layers-id
layers-id=layers-id

Layer to work on

what

Whether to work on the alpha channels or image data or both.

x
x=number

y
y=number

Originating pixel in the image

edge-value
edge-value={0-255} (30)

Tolerance level of how much the current pixels color may different from the originating pixel's.

x: 100, y: 100 edge-value: &values.value;

<select-layers/>

Select a list of layers to be rendered.

Attributes

include
include=glob

include-id
include-id=layer-id

exclude
exclude=glob

exclude-id
exclude-id=layer-id

<set-layer-mode/> or <set-layer-mode></set-layer-mode>

Set layer mode.

Attributes

mode
mode=mode (normal)

Mode is one of these:

variableMeaning

L

The active layer

S

The source layer (the sum of the layers below)

D

The destintion layer (the result)

Xrgb

Layer red (Xr), green (Xg) or blue channel (Xb)

Xhsv

Layer hue (Xh), saturation (Xs) or value channel (Xv) (virtual channels)

Xhls

Layer hue (Xh), lightness channel (Xl) or saturation (Xs) (virtual channels)

aX

Layer alpha, channel in layer alpha

All channels are calculated separately, if nothing else is specified.

Bottom layer:

Top layer:

normal

D=L applied with alpha: D=(L*aL+S*(1-aL)*aS) / (aL+(1-aL)*aS), aD=(aL+(1-aL)*aS)

add

D=L+S applied with alpha, aD=aS

subtract

D=S-L applied with alpha, aD=aS

multiply

D=S*L applied with alpha, aD=aS

divide

D=S/L applied with alpha, aD=aS

negdivide

D=1.0-S/L applied with alpha, aD=aS

modulo

D=S%L applied with alpha, aD=aS

invsubtract

D=L-S applied with alpha, aD=aS

invdivide

D=L/S applied with alpha, aD=aS

invmodulo

D=L%S applied with alpha, aD=aS

imultiply

D=(1-L)*S applied with alpha, aD=aS

idivide

D=S/(1-L) applied with alpha, aD=aS

invidivide

D=L/(1-S) applied with alpha, aD=aS

difference

D=abs(L-S) applied with alpha, aD=aS

max

D=max(L,S) applied with alpha, aD=aS

min

D=min(L,S) applied with alpha, aD=aS

bitwise_and

D=L&S applied with alpha, aD=aS

bitwise_or

D=L|S applied with alpha, aD=aS

bitwise_xor

D=L^S applied with alpha, aD=aS

replace

D=(L*aL+S*(1-aL)*aS) / (aL+(1-aL)*aS), aD=aS

red

Dr=(Lr*aLr+Sr*(1-aLr)*aSr) / (aLr+(1-aLr)*aSr), Dgb=Sgb, aD=aS

green

Dg=(Lg*aLg+Sg*(1-aLg)*aSg) / (aLg+(1-aLg)*aSg), Drb=Srb, aD=aS

blue

Db=(Lb*aLb+Sb*(1-aLb)*aSb) / (aLb+(1-aLb)*aSb), Drg=Srg, aD=aS

hardlight

Like photoshop hardlight layer mode, aD=aS

replace_hsv

Dhsv=Lhsv apply with alpha, aD=aS

hue

Dh=Lh apply with alpha, Dsv=Lsv, aD=aS

saturation

Ds=Ls apply with alpha, Dhv=Lhv, aD=aS

value

Dv=Lv apply with alpha, Dhs=Lhs, aD=aS

color

Dhs=Lhs apply with alpha, Dv=Lv, aD=aS

value_mul

Dv=Lv*Sv apply with alpha, Dhs=Lhs, aD=aS

darken

Dv=min(Lv,Sv) apply with alpha, Dhs=Lhs, aD=aS

lighten

Dv=max(Lv,Sv) apply with alpha, Dhs=Lhs, aD=aS

saturate

Ds=max(Ls,Ss) apply with alpha, Dhv=Lhv, aD=aS

desaturate

Ds=min(Ls,Ss) apply with alpha, Dhv=Lhv, aD=aS

hls_replace

Dhls=Lhls apply with alpha, aD=aS

hls_hue

Dh=Lh apply with alpha, Dsv=Lsv, aD=aS

hls_saturation

Ds=Ls apply with alpha, Dhv=Lhv, aD=aS

hls_lightness

Dl=Ll apply with alpha, Dhs=Lhs, aD=aS

hls_color

Dhs=Lhs apply with alpha, Dl=Ll, aD=aS

hls_lightness_mul

Dl=Ll*Sl apply with alpha, Dhs=Lhs, aD=aS

hls_darken

Dl=min(Ll,Sl) apply with alpha, Dhs=Lhs, aD=aS

hls_lighten

Dl=max(Ll,Sl) apply with alpha, Dhs=Lhs, aD=aS

hls_saturate

Ds=max(Ls,Ss) apply with alpha, Dhl=Lhl, aD=aS

hls_desaturate

Ds=min(Ls,Ss) apply with alpha, Dhl=Lhl, aD=aS

dissolve

i=random 0 or 1, D=i?L:S, aD=i+aS

behind

D=(S*aS+L*(1-aS)*aL) / (aS+(1-aS)*aL), aD=(aS+(1-aS)*aL); simply swap S and L

erase

D=S, aD=aS*(1-aL)

screen

1-(1-S)*(1-L) applied with alpha, aD=aS

overlay

(1-(1-a)*(1-b)-a*b)*a+a*b applied with alpha, aD=aS

burn_alpha

aD=aL+aS applied with alpha, D=L+S; experimental, may change or be removed

equal

each channel D=max if L==S, 0 otherwise, apply with alpha

not_equal

each channel D=max if L!=S, 0 otherwise, apply with alpha

less

each channel D=max if L<S, 0 otherwise, apply with alpha

more

each channel D=max if L>S, 0 otherwise, apply with alpha

less_or_equal

each channel D=max if L<=S, 0 otherwise, apply with alpha

more_or_equal

each channel D=max if L>=S, 0 otherwise, apply with alpha

logic_equal

logic: D=white and opaque if L==S, black and transparent otherwise

logic_not_equal

logic: D=white and opaque if any L!=S, black and transparent otherwise

logic_strict_less

logic: D=white and opaque if all L<S, black and transparent otherwise

logic_strict_more

logic: D=white and opaque if all L>S, black and transparent otherwise

logic_strict_less_equal

logic: D=white and opaque if all L<=L, black and transparent otherwise

logic_strict_more_equal

logic: D=white and opaque if all L>=L, black and transparent otherwise

<shadow/> or <shadow></shadow>

Creates a new layer which contains the shadow of the specified layers.

<gxml format='png' true-alpha='1' background-color='white'> <shadow xoffset='3' yoffset='3' soft='3' color='blue'> <text name='foo' color='white'>Hello World!</text> </shadow> </gxml>

Attributes

layers
layers=glob

Layer to create shadow for.

layers-id
layers-id=layer-id

Layer to create shadow for.

xoffset
xoffset=number

How much to the right of the specified layer the shadow will fall.

yoffset
yoffset=number

How much below the specified layer the shadow will fall.

soft
soft=number

How blurred the shadow should be.

color
color=color

Color of the shadow.

<text></text>

Render text onto the specified layer or, if no layer is specified, onto a new layer.

Attributes

layers-id
layers-id=layer-id

Layer to render the text to.

layers
layers=glob

Layer to render the text to.

name
name=string

Name of the new layer.

font
font=string

Selects which font to use. You can get a list of all available fonts by using the list fonts task in the administration interface, or by using the <emit fonts> plugin.

fontsize
fontsize=number

Selects which size of the font that should be used.

color
color=color

Sets the text color.

x
x=number

y
y=number

modulate-alpha

The text will be used to modulate the alpha channel of the specified layer.

replace-alpha

Almost the same as the modulate-alpha attribute but replaces the whole alpha channel of the specified layer.