ILIAS  eassessment Revision 61809
 All Data Structures Namespaces Files Functions Variables Groups Pages
Drawing.php
Go to the documentation of this file.
1 <?php
37 {
44  public static function pixelsToEMU($pValue = 0) {
45  return round($pValue * 9525);
46  }
47 
54  public static function EMUToPixels($pValue = 0) {
55  if ($pValue != 0) {
56  return round($pValue / 9525);
57  } else {
58  return 0;
59  }
60  }
61 
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 
77  // Exact width can be determined
78  $colWidth = $pValue
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 
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 
105  // Exact width can be determined
106  $colWidth = $pValue
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 
130  public static function pixelsToPoints($pValue = 0) {
131  return $pValue * 0.67777777;
132  }
133 
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 
154  public static function degreesToAngle($pValue = 0) {
155  return (int)round($pValue * 60000);
156  }
157 
164  public static function angleToDegrees($pValue = 0) {
165  if ($pValue != 0) {
166  return round($pValue / 60000);
167  } else {
168  return 0;
169  }
170  }
171 
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 }