[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/phpexcel/PHPExcel/Shared/ -> Drawing.php (source)

   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  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1