PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.0.3
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.0.3
4.0.8 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 All 149 releases
visualizer / vendor / phpoffice / phpexcel / Classes / PHPExcel / Shared / Drawing.php

Drawing.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.0.3, at vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/Drawing.php

273 lines 8.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * PHPExcel
4 *
5 * Copyright (c) 2006 - 2014 PHPExcel
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 *
21 * @category PHPExcel
22 * @package PHPExcel_Shared
23 * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
24 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25 * @version ##VERSION##, ##DATE##
26 */
27
28
29 /**
30 * PHPExcel_Shared_Drawing
31 *
32 * @category PHPExcel
33 * @package PHPExcel_Shared
34 * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
35 */
36 class PHPExcel_Shared_Drawing
37 {
38 /**
39 * Convert pixels to EMU
40 *
41 * @param int $pValue Value in pixels
42 * @return int Value in EMU
43 */
44 public static function pixelsToEMU($pValue = 0) {
45 return round($pValue * 9525);
46 }
47
48 /**
49 * Convert EMU to pixels
50 *
51 * @param int $pValue Value in EMU
52 * @return int Value in pixels
53 */
54 public static function EMUToPixels($pValue = 0) {
55 if ($pValue != 0) {
56 return round($pValue / 9525);
57 } else {
58 return 0;
59 }
60 }
61
62 /**
63 * Convert pixels to column width. Exact algorithm not known.
64 * By inspection of a real Excel file using Calibri 11, one finds 1000px ~ 142.85546875
65 * This gives a conversion factor of 7. Also, we assume that pixels and font size are proportional.
66 *
67 * @param int $pValue Value in pixels
68 * @param PHPExcel_Style_Font $pDefaultFont Default font of the workbook
69 * @return int Value in cell dimension
70 */
71 public static function pixelsToCellDimension($pValue = 0, PHPExcel_Style_Font $pDefaultFont) {
72 // Font name and size
73 $name = $pDefaultFont->getName();
74 $size = $pDefaultFont->getSize();
75
76 if (isset(PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size])) {
77 // Exact width can be determined
78 $colWidth = $pValue
79 * PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['width']
80 / PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['px'];
81 } else {
82 // We don't have data for this particular font and size, use approximation by
83 // extrapolating from Calibri 11
84 $colWidth = $pValue * 11
85 * PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['width']
86 / PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['px'] / $size;
87 }
88
89 return $colWidth;
90 }
91
92 /**
93 * Convert column width from (intrinsic) Excel units to pixels
94 *
95 * @param float $pValue Value in cell dimension
96 * @param PHPExcel_Style_Font $pDefaultFont Default font of the workbook
97 * @return int Value in pixels
98 */
99 public static function cellDimensionToPixels($pValue = 0, PHPExcel_Style_Font $pDefaultFont) {
100 // Font name and size
101 $name = $pDefaultFont->getName();
102 $size = $pDefaultFont->getSize();
103
104 if (isset(PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size])) {
105 // Exact width can be determined
106 $colWidth = $pValue
107 * PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['px']
108 / PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['width'];
109
110 } else {
111 // We don't have data for this particular font and size, use approximation by
112 // extrapolating from Calibri 11
113 $colWidth = $pValue * $size
114 * PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['px']
115 / PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['width'] / 11;
116 }
117
118 // Round pixels to closest integer
119 $colWidth = (int) round($colWidth);
120
121 return $colWidth;
122 }
123
124 /**
125 * Convert pixels to points
126 *
127 * @param int $pValue Value in pixels
128 * @return int Value in points
129 */
130 public static function pixelsToPoints($pValue = 0) {
131 return $pValue * 0.67777777;
132 }
133
134 /**
135 * Convert points to pixels
136 *
137 * @param int $pValue Value in points
138 * @return int Value in pixels
139 */
140 public static function pointsToPixels($pValue = 0) {
141 if ($pValue != 0) {
142 return (int) ceil($pValue * 1.333333333);
143 } else {
144 return 0;
145 }
146 }
147
148 /**
149 * Convert degrees to angle
150 *
151 * @param int $pValue Degrees
152 * @return int Angle
153 */
154 public static function degreesToAngle($pValue = 0) {
155 return (int)round($pValue * 60000);
156 }
157
158 /**
159 * Convert angle to degrees
160 *
161 * @param int $pValue Angle
162 * @return int Degrees
163 */
164 public static function angleToDegrees($pValue = 0) {
165 if ($pValue != 0) {
166 return round($pValue / 60000);
167 } else {
168 return 0;
169 }
170 }
171
172 /**
173 * Create a new image from file. By alexander at alexauto dot nl
174 *
175 * @link http://www.php.net/manual/en/function.imagecreatefromwbmp.php#86214
176 * @param string $filename Path to Windows DIB (BMP) image
177 * @return resource
178 */
179 public static function imagecreatefrombmp($p_sFile)
180 {
181 // Load the image into a string
182 $file = fopen($p_sFile,"rb");
183 $read = fread($file,10);
184 while(!feof($file)&&($read<>""))
185 $read .= fread($file,1024);
186
187 $temp = unpack("H*",$read);
188 $hex = $temp[1];
189 $header = substr($hex,0,108);
190
191 // Process the header
192 // Structure: http://www.fastgraph.com/help/bmp_header_format.html
193 if (substr($header,0,4)=="424d")
194 {
195 // Cut it in parts of 2 bytes
196 $header_parts = str_split($header,2);
197
198 // Get the width 4 bytes
199 $width = hexdec($header_parts[19].$header_parts[18]);
200
201 // Get the height 4 bytes
202 $height = hexdec($header_parts[23].$header_parts[22]);
203
204 // Unset the header params
205 unset($header_parts);
206 }
207
208 // Define starting X and Y
209 $x = 0;
210 $y = 1;
211
212 // Create newimage
213 $image = imagecreatetruecolor($width,$height);
214
215 // Grab the body from the image
216 $body = substr($hex,108);
217
218 // Calculate if padding at the end-line is needed
219 // Divided by two to keep overview.
220 // 1 byte = 2 HEX-chars
221 $body_size = (strlen($body)/2);
222 $header_size = ($width*$height);
223
224 // Use end-line padding? Only when needed
225 $usePadding = ($body_size>($header_size*3)+4);
226
227 // Using a for-loop with index-calculation instaid of str_split to avoid large memory consumption
228 // Calculate the next DWORD-position in the body
229 for ($i=0;$i<$body_size;$i+=3)
230 {
231 // Calculate line-ending and padding
232 if ($x>=$width)
233 {
234 // If padding needed, ignore image-padding
235 // Shift i to the ending of the current 32-bit-block
236 if ($usePadding)
237 $i += $width%4;
238
239 // Reset horizontal position
240 $x = 0;
241
242 // Raise the height-position (bottom-up)
243 $y++;
244
245 // Reached the image-height? Break the for-loop
246 if ($y>$height)
247 break;
248 }
249
250 // Calculation of the RGB-pixel (defined as BGR in image-data)
251 // Define $i_pos as absolute position in the body
252 $i_pos = $i*2;
253 $r = hexdec($body[$i_pos+4].$body[$i_pos+5]);
254 $g = hexdec($body[$i_pos+2].$body[$i_pos+3]);
255 $b = hexdec($body[$i_pos].$body[$i_pos+1]);
256
257 // Calculate and draw the pixel
258 $color = imagecolorallocate($image,$r,$g,$b);
259 imagesetpixel($image,$x,$height-$y,$color);
260
261 // Raise the horizontal position
262 $x++;
263 }
264
265 // Unset the body / free the memory
266 unset($body);
267
268 // Return image-object
269 return $image;
270 }
271
272 }
273