Ejemplo n.º 1
0
 private function buildImage($p_sText, $p_aColor, $p_aBackgroundColor)
 {
     $this->createImage($p_aColor, $p_aBackgroundColor);
     if (!empty($p_sText)) {
         $iWidth = self::IMAGE_WIDTH;
         $iHeight = self::IMAGE_HEIGHT;
         $sText = strtoupper($p_sText);
         $aLines = explode("\n", $sText);
         $iLongestLine = 0;
         foreach ($aLines as $t_sLine) {
             $iLineLength = strlen($t_sLine);
             if ($iLineLength > $iLongestLine) {
                 $iLongestLine = $iLineLength;
             }
         }
         $iFontSize = 1500 / $iLongestLine;
         $box = new Box($this->m_rImage);
         $box->setFontFace(__DIR__ . '/../../fonts/OpenSans-Bold.ttf');
         $box->setFontColor(new Color($p_aColor['red'], $p_aColor['green'], $p_aColor['blue']));
         //$box->setTextShadow(new Color(0, 0, 0, 50), 2, 2);
         $box->setFontSize($iFontSize);
         $box->setBox(0, 0, $iWidth, $iHeight);
         $box->setTextAlign('center', 'center');
         $box->draw($sText);
     }
 }
Ejemplo n.º 2
0
 protected function mockBox($im)
 {
     imagealphablending($im, true);
     imagesavealpha($im, true);
     $box = new Box($im);
     $box->setFontFace(__DIR__ . '/LinLibertine_R.ttf');
     // http://www.dafont.com/franchise.font
     $box->setFontColor(new Color(255, 75, 140));
     $box->setFontSize(16);
     $box->setBackgroundColor(new Color(0, 0, 0));
     $box->setBox(0, 10, imagesx($im), 150);
     return $box;
 }
Ejemplo n.º 3
0
 /**
  * Generates button image to memory
  */
 public function generate()
 {
     if ($this->config['signature']) {
         $im = imagecreatefrompng($this->resourcesDir . '/signatures/en.png');
         $this->elements['signature'] = array('im' => $im, 'width' => imagesx($im), 'height' => 17);
     } else {
         $this->elements['signature'] = null;
     }
     switch ($this->config['theme']) {
         case 'green':
         case 'blue':
         case 'pink':
             $this->button['fontColor'] = new Color(255, 255, 255, 0);
             $this->button['shadowColor'] = new Color(0, 0, 0, 70);
             break;
         case 'red':
         case 'black':
         case 'yellow':
             $this->button['fontColor'] = new Color(255, 255, 255, 0);
             $this->button['shadowColor'] = new Color(0, 0, 0, 60);
             break;
         case 'grey':
             $this->button['fontColor'] = new Color(52, 52, 52, 0);
             $this->button['shadowColor'] = new Color(249, 249, 249, 0);
             break;
         default:
             throw new \InvalidArgumentException('Invalid theme.');
     }
     $im = imagecreatefrompng($this->resourcesDir . '/themes/' . $this->config['theme'] . '.png');
     $this->button['im'] = $im;
     $this->button['width'] = imagesx($im);
     $this->button['height'] = imagesy($im);
     $this->button['shadowY'] = -1;
     if ((int) $this->config['priority'] <= 5 and (int) $this->config['priority'] >= 1) {
         $this->elements['priority']['val'] = (int) $this->config['priority'];
         $this->elements['priority']['height'] = 24;
     } else {
         $this->elements['priority'] = null;
     }
     if ((int) $this->config['priority'] <= 5 and (int) $this->config['priority'] >= 1) {
         $this->elements['priority']['val'] = (int) $this->config['priority'];
         $this->elements['priority']['height'] = 24;
     } else {
         $this->elements['priority'] = null;
     }
     if (!empty($this->config['captionText'])) {
         if (strlen($this->config['captionText']) < 200) {
             $this->elements['caption']['text'] = $this->config['captionText'];
             $this->elements['caption']['height'] = 27;
             $this->elements['caption']['y'] = 3;
         } else {
             throw new \InvalidArgumentException('Invalid caption');
         }
     } else {
         $this->elements['caption'] = null;
     }
     $width = $this->button['width'];
     $height = 0;
     if (!is_null($this->elements['priority']) && is_null($this->elements['caption'])) {
         $height += 37;
     } elseif (is_null($this->elements['priority']) && !is_null($this->elements['caption'])) {
         $height += 37;
     } elseif (!is_null($this->elements['priority']) && !is_null($this->elements['caption'])) {
         $height += 60;
     }
     if (!is_null($this->elements['signature'])) {
         $height += 17;
     }
     $height += $this->button['height'];
     $this->im = imagecreatetruecolor($width, $height + 10);
     imagesavealpha($this->im, true);
     imagefill($this->im, 0, 0, imagecolorallocatealpha($this->im, 0, 0, 0, 127));
     /**
      * MoD signature
      */
     if (!is_null($this->elements['signature'])) {
         imagecopy($this->im, $this->elements['signature']['im'], ($width - $this->elements['signature']['width']) / 2, 0, 0, 0, $this->elements['signature']['width'], $this->elements['signature']['height']);
     }
     /**
      * Additional information
      */
     if (!is_null($this->elements['priority']) and is_null($this->elements['caption']) or is_null($this->elements['priority']) and !is_null($this->elements['caption'])) {
         $footer = imagecreatefrompng($this->resourcesDir . '/themes/f1.png');
         imagecopy($this->im, $footer, (imagesx($this->im) - imagesx($footer)) / 2, 59 + $this->elements['signature']['height'], 0, 0, imagesx($footer), imagesy($footer));
     }
     if (!is_null($this->elements['priority']) and !is_null($this->elements['caption'])) {
         $this->elements['priority']['y'] = -13;
         $footer = imagecreatefrompng($this->resourcesDir . '/themes/f2.png');
         imagecopy($this->im, $footer, (imagesx($this->im) - imagesx($footer)) / 2, 53 + $this->elements['signature']['height'], 0, 0, imagesx($footer), imagesy($footer));
     }
     /**
      * Priorities
      */
     if (!is_null($this->elements['priority'])) {
         $x = 154;
         $y = 72 + $this->elements['signature']['height'];
         if ($this->elements['priority']['val'] < 5) {
             $starI = imagecreatefrompng($this->resourcesDir . '/stars/s0.png');
         } else {
             throw new \InvalidArgumentException("Too high priority has been specified.");
         }
         $starA = imagecreatefrompng($this->resourcesDir . '/stars/s' . $this->elements['priority']['val'] . '.png');
         for ($i = 0; $i < $this->elements['priority']['val']; $i++) {
             imagecopy($this->im, $starA, $x + $i * 18, $y, 0, 0, 17, 17);
         }
         for ($i = 0; $i < 5 - $this->elements['priority']['val']; $i++) {
             imagecopy($this->im, $starI, $x + $this->elements['priority']['val'] * 18 + $i * 18, $y, 0, 0, 17, 17);
         }
         $type = new Box($this->im);
         $type->setFontFace($this->resourcesDir . '/fonts/d.otf');
         $type->setFontSize(16);
         $type->setLineHeight(1.25);
         $type->setTextShadow(new Color(255, 255, 255), 0, 1);
         $type->setFontColor(new Color(75, 75, 75));
         $type->setTextAlign('right', 'center');
         $type->setBox(17, 5 + $this->button['height'] + $this->elements['signature']['height'], 130, 20);
         $type->draw($this->config['priorityLabel']);
     }
     if (!is_null($this->elements['caption'])) {
         $type = new Box($this->im);
         $type->setFontFace($this->resourcesDir . '/fonts/bn.ttf');
         $type->setFontSize(21);
         $type->setTextShadow(new Color(255, 255, 255), 0, 1);
         $type->setFontColor(new Color(52, 52, 52));
         $type->setTextAlign('center', 'center');
         $type->setBox(10, $this->button['height'] + $this->elements['priority']['height'] + $this->elements['signature']['height'] + $this->elements['caption']['y'], 280, 30);
         $type->draw($this->elements['caption']['text']);
     }
     imagecopy($this->im, $this->button['im'], 0, $this->elements['signature']['height'], 0, 0, $this->button['width'], $this->button['height']);
     $type = new Box($this->im);
     $type->setFontFace($this->config['fontPath']);
     $type->setFontSize($this->config['fontSize']);
     $type->setLineHeight(0.8);
     $type->setFontColor($this->button['fontColor']);
     $type->setTextShadow($this->button['shadowColor'], 0, $this->button['shadowY']);
     $type->setTextAlign('center', 'center');
     $type->setBox(0, 4 + $this->elements['signature']['height'], $this->button['width'], $this->button['height']);
     $type->draw($this->config['titleText']);
     imagesavealpha($this->im, true);
 }
Ejemplo n.º 4
0
 /**
  * Generate letter image and return image
  *
  * @param $letter
  * @param $color
  * @param $size
  * @return resource
  */
 protected function createImage($letter, $color, $size)
 {
     $this->img = imagecreatetruecolor($size, $size);
     $bgColor = imagecolorallocate($this->img, $color[0], $color[2], $color[1]);
     imagefill($this->img, 0, 0, $bgColor);
     $box = new Box($this->img);
     $box->setFontFace($this->getFontFile());
     $box->setFontColor($this->getTextColor());
     if ($this->showTextShadow) {
         $box->setTextShadow(new Color(0, 0, 0, 50), 2, 2);
     }
     $box->setFontSize(round($size * $this->fontRatio));
     $box->setBox(0, 0, $size, $size);
     $box->setTextAlign('center', 'center');
     $box->draw($letter);
 }