source: spip-zone/_plugins_/adaptive_images/trunk/lib/geometrize/geometrize/exporter/SvgExporter.class.php @ 115922

Last change on this file since 115922 was 115922, checked in by cedric@…, 6 weeks ago

Optimization de la rapidite de geometrize

File size: 3.8 KB
Line 
1<?php
2
3// Generated by Haxe 3.4.7
4class geometrize_exporter_SvgExporter {
5        public function __construct(){
6        }
7
8        static $SVG_STYLE_HOOK = "::svg_style_hook::";
9
10        /**
11         * @param array $results
12         * @param int $width
13         * @param int $height
14         * @return string
15         */
16        static function export($results, $width, $height){
17                $out = geometrize_exporter_SvgExporter::getSvgPrelude();
18                $out .= geometrize_exporter_SvgExporter::getSvgNodeOpen($width, $height);
19                $shapes = array_column($results, 'shape');
20                $out .= geometrize_exporter_SvgExporter::exportShapes($shapes);
21                $out .= geometrize_exporter_SvgExporter::getSvgNodeClose();
22                return $out;
23        }
24
25        /**
26         * @param array $shapes
27         * @return string
28         */
29        static function exportShapes($shapes){
30                $out = [];
31                foreach ($shapes as $shape) {
32                        $out[] = geometrize_exporter_SvgExporter::exportShape($shape);
33                }
34                $out = implode("\x0A", $out);
35                return $out;
36        }
37
38        /**
39         * @param geometrize_shape_Shape $shape
40         * @return string
41         */
42        static function exportShape($shape){
43                $s = $shape->getSvgShapeData();
44                $sub = geometrize_exporter_SvgExporter::$SVG_STYLE_HOOK;
45                $by = geometrize_exporter_SvgExporter::stylesForShape($shape);
46                if ($sub===""){
47                        return implode(str_split($s), $by);
48                } else {
49                        return str_replace($sub, $by, $s);
50                }
51        }
52
53        /**
54         * @param array $points
55         *   each element is a ['x'=>int, 'y'=>int] array
56         * @return string
57         */
58        static public function exportPolygon($points) {
59                $s1 = "<polygon points=\"";
60
61                foreach ($points as $point) {
62                        $s1 .= $point['x'] . " " . $point['y'] . " ";
63                }
64                $s1 = rtrim($s1);
65                $s1 .= "\" " . geometrize_exporter_SvgExporter::$SVG_STYLE_HOOK . "/>";
66                return $s1;
67        }
68
69        /**
70         * @return string
71         */
72        static function getSvgPrelude(){
73                return "<?xml version=\"1.0\" standalone=\"no\"?>\x0A";
74        }
75
76        /**
77         * @param int $width
78         * @param int $height
79         * @return string
80         */
81        static function getSvgNodeOpen($width, $height){
82                return "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.2\" baseProfile=\"tiny\" width=\"" . intval($width) . "\" height=\"" . intval($height) . "\">\x0A";
83        }
84
85        /**
86         * @return string
87         */
88        static function getSvgNodeClose(){
89                return "</svg>";
90        }
91
92        /**
93         * @param geometrize_shape_Shape $shape
94         * @return string
95         */
96        static function stylesForShape($shape){
97                $style = "";
98                switch ($shape->getType()) {
99                        case geometrize_shape_ShapeTypes::T_LINE:
100                        case geometrize_shape_ShapeTypes::T_QUADRATIC_BEZIER:
101                                $style = geometrize_exporter_SvgExporter::strokeForColor($shape->color) . " stroke-width=\"1\" fill=\"none\" ";
102                                $style .= geometrize_exporter_SvgExporter::strokeOpacityForAlpha($shape->color & 255);
103                                break;
104                        default:
105                                $style = geometrize_exporter_SvgExporter::fillForColor($shape->color) . " ";
106                                $style .= geometrize_exporter_SvgExporter::fillOpacityForAlpha($shape->color & 255);
107                                break;
108                }
109                return $style ;
110        }
111
112        /**
113         * @param int $color
114         * @return string
115         */
116        static function rgbForColor($color){
117                return "rgb(" . ($color >> 24 & 255) . "," . ($color >> 16 & 255) . "," . ($color >> 8 & 255) . ")";
118        }
119
120        /**
121         * @param int $color
122         * @return string
123         */
124        static function strokeForColor($color){
125                return "stroke=\"" . geometrize_exporter_SvgExporter::rgbForColor($color) . "\"";
126        }
127
128        /**
129         * @param int $color
130         * @return string
131         */
132        static function fillForColor($color){
133                return "fill=\"" . geometrize_exporter_SvgExporter::rgbForColor($color) . "\"";
134        }
135
136        /**
137         * @param int $alpha
138         * @return string
139         */
140        static function fillOpacityForAlpha($alpha){
141                if ($alpha === 255) {
142                        return "";
143                }
144                return "fill-opacity=\"" . ($alpha/255.0) . "\"";
145        }
146
147        /**
148         * @param int $alpha
149         * @return string
150         */
151        static function strokeOpacityForAlpha($alpha){
152                if ($alpha === 255) {
153                        return "";
154                }
155                return "stroke-opacity=\"" . ($alpha/255.0)  . "\"";
156        }
157
158        /**
159         * @return string
160         */
161        function __toString(){
162                return 'geometrize.exporter.SvgExporter';
163        }
164}
Note: See TracBrowser for help on using the repository browser.