2
: This example creates a new image using the image/basic function and paints different sorts of circles and arcs onto it.
3
: As it is, the example just asserts that the resulting xs:base64Binary is not empty, in a real application one could further process the image, or write it
4
: to disk using file:write(a_path, $image-with-circles, <method>binary</method>), send it in an email etc.
6
: Actually, as the paint function accepts sequences of shapes, it would have been possible to paint all circles, ellipses and arcs with one single command
7
: paint:paint($new-image, (<image:circle><origin><x>20</x><y>20</y></origin><perimeter>20</perimeter></image:circle>,
8
: <image:ellipse><origin><x>40</x><y>70</y></origin><perimeterX>20</perimeterX><perimeterY>10</perimeterY></image:ellipse>,
9
: <image:arc><origin><x>70</x><y>35</y></origin><perimeterX>15</perimeterX><perimeterY>25</perimeterY><startDegrees>90</startDegrees><endDegrees>180</endDegrees></image:arc>,
10
: <image:circle><fillColor>#0000FF</fillColor><origin><x>80</x><y>20</y></origin><perimeter>20</perimeter></image:circle>))
12
: However, here it is done with several function calls to make it more clear what exactly is painted.
15
import module namespace basic = 'http://www.zorba-xquery.com/modules/image/basic';
16
import module namespace paint = 'http://www.zorba-xquery.com/modules/image/paint';
17
import module namespace file = 'http://expath.org/ns/file';
19
import schema namespace image = 'http://www.zorba-xquery.com/modules/image/image';
21
let $new-image := basic:create(xs:unsignedInt(100), xs:unsignedInt(100), "GIF")
23
(: paint a simple circle with origin in (20, 20) and a perimeter of 20px to the image :)
24
let $image-with-circle := paint:paint($new-image, <image:circle><origin><x>20</x><y>20</y></origin><perimeter>20</perimeter></image:circle>)
26
(: paint an ellipse to the image :)
27
let $image-with-circles := paint:paint($image-with-circle, <image:ellipse><origin><x>40</x><y>70</y></origin><perimeterX>20</perimeterX><perimeterY>10</perimeterY></image:ellipse>)
29
(: paint an arc from 90 to 180 degrees to the image :)
30
let $image-with-circles := paint:paint($image-with-circles, <image:arc><origin><x>70</x><y>35</y></origin><perimeterX>15</perimeterX><perimeterY>25</perimeterY><startDegrees>90</startDegrees><endDegrees>180</endDegrees></image:arc>)
32
(: paint a blue circle with black contour onto the image :)
33
let $image-with-circles := paint:paint($image-with-circles, <image:circle><fillColor>#0000FF</fillColor><origin><x>80</x><y>20</y></origin><perimeter>20</perimeter></image:circle>)
36
return not(empty($image-with-circles))
2
: This example creates a new image using the image/basic function and paints different sorts of circles and arcs onto it.
3
: As it is, the example just asserts that the resulting xs:base64Binary is not empty, in a real application one could further process the image, or write it
4
: to disk using file:write(a_path, $image-with-circles, <method>binary</method>), send it in an email etc.
6
: Actually, as the paint function accepts sequences of shapes, it would have been possible to paint all circles, ellipses and arcs with one single command
7
: paint:paint($new-image, (<image:circle><image:origin><image:x>20</image:x><image:y>20</image:y></image:origin><image:perimeter>20</image:perimeter></image:circle>,
8
: <image:ellipse><image:origin><image:x>40</image:x><image:y>70</image:y></image:origin><image:perimeterX>20</image:perimeterX><image:perimeterY>10</image:perimeterY></image:ellipse>,
9
: <image:arc><image:origin><image:x>70</image:x><image:y>35</image:y></image:origin><image:perimeterX>15</image:perimeterX><image:perimeterY>25</image:perimeterY><image:startDegrees>90</image:startDegrees><image:endDegrees>180</image:endDegrees></image:arc>,
10
: <image:circle><image:fillColor>#0000FF</image:fillColor><image:origin><image:x>80</image:x><image:y>20</image:y></image:origin><image:perimeter>20</image:perimeter></image:circle>))
12
: However, here it is done with several function calls to make it more clear what exactly is painted.
15
import module namespace basic = 'http://www.zorba-xquery.com/modules/image/basic';
16
import module namespace paint = 'http://www.zorba-xquery.com/modules/image/paint';
17
import module namespace file = 'http://expath.org/ns/file';
19
import schema namespace image = 'http://www.zorba-xquery.com/modules/image/image';
21
let $new-image := basic:create(xs:unsignedInt(100), xs:unsignedInt(100), "GIF")
23
(: paint a simple circle with origin in (20, 20) and a perimeter of 20px to the image :)
24
let $image-with-circle := paint:paint($new-image, <image:circle><image:origin><image:x>20</image:x><image:y>20</image:y></image:origin><image:perimeter>20</image:perimeter></image:circle>)
26
(: paint an ellipse to the image :)
27
let $image-with-circles := paint:paint($image-with-circle, <image:ellipse><image:origin><image:x>40</image:x><image:y>70</image:y></image:origin><image:perimeterX>20</image:perimeterX><image:perimeterY>10</image:perimeterY></image:ellipse>)
29
(: paint an arc from 90 to 180 degrees to the image :)
30
let $image-with-circles := paint:paint($image-with-circles, <image:arc><image:origin><image:x>70</image:x><image:y>35</image:y></image:origin><image:perimeterX>15</image:perimeterX><image:perimeterY>25</image:perimeterY><image:startDegrees>90</image:startDegrees><image:endDegrees>180</image:endDegrees></image:arc>)
32
(: paint a blue circle with black contour onto the image :)
33
let $image-with-circles := paint:paint($image-with-circles, <image:circle><image:fillColor>#0000FF</image:fillColor><image:origin><image:x>80</image:x><image:y>20</image:y></image:origin><image:perimeter>20</image:perimeter></image:circle>)
36
return not(empty($image-with-circles))