source: branches/MootoolsFileManager-Update/plugins/MootoolsFileManager/mootools-filemanager/Assets/Connector/Assets/getid3/module.graphic.svg.php @ 1300

Last change on this file since 1300 was 1300, checked in by gogo, 8 years ago

Update the MootoolsFileManager? to the latest cpojer with some modifications.
Add a demo for the MFM examples/mootools-file-manager.php
Change the default config for ImageManager? and ExtendedFileManager? for added security.

File size: 4.2 KB
Line 
1<?php
2/////////////////////////////////////////////////////////////////
3/// getID3() by James Heinrich <info@getid3.org>               //
4//  available at http://getid3.sourceforge.net                 //
5//            or http://www.getid3.org                         //
6/////////////////////////////////////////////////////////////////
7// See readme.txt for more details                             //
8/////////////////////////////////////////////////////////////////
9//                                                             //
10// module.graphic.svg.php                                      //
11// module for analyzing SVG Image files                        //
12// dependencies: NONE                                          //
13//                                                            ///
14/////////////////////////////////////////////////////////////////
15
16
17class getid3_svg
18{
19
20
21        function getid3_svg(&$fd, &$ThisFileInfo) {
22                fseek($fd, $ThisFileInfo['avdataoffset'], SEEK_SET);
23
24                $SVGheader = fread($fd, 4096);
25                if (preg_match('#\<\?xml([^\>]+)\?\>#i', $SVGheader, $matches)) {
26                        $ThisFileInfo['svg']['xml']['raw'] = $matches;
27                }
28                if (preg_match('#\<\!DOCTYPE([^\>]+)\>#i', $SVGheader, $matches)) {
29                        $ThisFileInfo['svg']['doctype']['raw'] = $matches;
30                }
31                if (preg_match('#\<svg([^\>]+)\>#i', $SVGheader, $matches)) {
32                        $ThisFileInfo['svg']['svg']['raw'] = $matches;
33                }
34                if (isset($ThisFileInfo['svg']['svg']['raw'])) {
35
36                        $sections_to_fix = array('xml', 'doctype', 'svg');
37                        foreach ($sections_to_fix as $section_to_fix) {
38                                if (!isset($ThisFileInfo['svg'][$section_to_fix])) {
39                                        continue;
40                                }
41                                $section_data = array();
42                                while (preg_match('/ "([^"]+)"/', $ThisFileInfo['svg'][$section_to_fix]['raw'][1], $matches)) {
43                                        $section_data[] = $matches[1];
44                                        $ThisFileInfo['svg'][$section_to_fix]['raw'][1] = str_replace($matches[0], '', $ThisFileInfo['svg'][$section_to_fix]['raw'][1]);
45                                }
46                                while (preg_match('/([^\s]+)="([^"]+)"/', $ThisFileInfo['svg'][$section_to_fix]['raw'][1], $matches)) {
47                                        $section_data[] = $matches[0];
48                                        $ThisFileInfo['svg'][$section_to_fix]['raw'][1] = str_replace($matches[0], '', $ThisFileInfo['svg'][$section_to_fix]['raw'][1]);
49                                }
50                                $section_data = array_merge($section_data, preg_split('/[\s,]+/', $ThisFileInfo['svg'][$section_to_fix]['raw'][1]));
51                                foreach ($section_data as $keyvaluepair) {
52                                        $keyvaluepair = trim($keyvaluepair);
53                                        if ($keyvaluepair) {
54                                                $keyvalueexploded = explode('=', $keyvaluepair);
55                                                $key   = (isset($keyvalueexploded[0]) ? $keyvalueexploded[0] : '');
56                                                $value = (isset($keyvalueexploded[1]) ? $keyvalueexploded[1] : '');
57                                                $ThisFileInfo['svg'][$section_to_fix]['sections'][$key] = trim($value, '"');
58                                        }
59                                }
60                        }
61
62                        $ThisFileInfo['fileformat']                  = 'svg';
63                        $ThisFileInfo['video']['dataformat']         = 'svg';
64                        $ThisFileInfo['video']['lossless']           = true;
65                        //$ThisFileInfo['video']['bits_per_sample']    = 24;
66                        $ThisFileInfo['video']['pixel_aspect_ratio'] = (float) 1;
67
68                        if (!empty($ThisFileInfo['svg']['svg']['sections']['width'])) {
69                                $ThisFileInfo['svg']['width']  = intval($ThisFileInfo['svg']['svg']['sections']['width']);
70                        }
71                        if (!empty($ThisFileInfo['svg']['svg']['sections']['height'])) {
72                                $ThisFileInfo['svg']['height'] = intval($ThisFileInfo['svg']['svg']['sections']['height']);
73                        }
74                        if (!empty($ThisFileInfo['svg']['svg']['sections']['version'])) {
75                                $ThisFileInfo['svg']['version'] = $ThisFileInfo['svg']['svg']['sections']['version'];
76                        }
77                        if (!isset($ThisFileInfo['svg']['version']) && isset($ThisFileInfo['svg']['doctype']['sections'])) {
78                                foreach ($ThisFileInfo['svg']['doctype']['sections'] as $key => $value) {
79                                        if (preg_match('#//W3C//DTD SVG ([0-9\.]+)//#i', $key, $matches)) {
80                                                $ThisFileInfo['svg']['version'] = $matches[1];
81                                                break;
82                                        }
83                                }
84                        }
85
86                        if (!empty($ThisFileInfo['svg']['width'])) {
87                                $ThisFileInfo['video']['resolution_x'] = $ThisFileInfo['svg']['width'];
88                        }
89                        if (!empty($ThisFileInfo['svg']['height'])) {
90                                $ThisFileInfo['video']['resolution_y'] = $ThisFileInfo['svg']['height'];
91                        }
92
93                        return true;
94                }
95                $ThisFileInfo['error'][] = 'Did not find expected <svg> tag';
96                return false;
97        }
98
99}
100
101
102?>
Note: See TracBrowser for help on using the repository browser.