[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |