Ejemplo n.º 1
0
 /**
  * テキストを合成
  *
  * <pre>
  * 指定位置にテキストを追加します。$alignに右寄せ(_BEAR_ALIGN_RIGHT)を指定
  * すると$xは右からのスペースになります。fontはターミナルでfc-listで得られるフ
  * ォントの名前を使用します。イタリックは$slantにCAIRO_FONT_SLANT_ITALIC,
  *  ボールドは$weightにCAIRO_FONT_WEIGHT_BOLDを指定します。
  * </pre>
  *
  * @param string $text      テキスト
  * @param int    $x         X座標
  * @param int    $y         Y座標
  * @param int    $size      フォントサイズ
  * @param int    $align     BEAR_Img::LEFT | BEAR_Img::CENTER | BEAR_Img::RIGHT
  * @param array  $colorOne  内側カラー array($r, $g, $b)
  * @param array  $colorTwo  アウトラインカラー array($r, $g, $b)
  * @param string $font      フォント
  * @param float  $textAlpha アルファブレンディング(0..1)
  * @param float  $lineWidth ラインの幅
  * @param int    $slant     CAIRO_FONT_SLANT_NORMAL | CAIRO_FONT_SLANT_ITALIC
  * @param int    $weight    CAIRO_FONT_WEIGHT_NORMAL | CAIRO_FONT_WEIGHT_BOLD
  *
  * @return void
  */
 public function addText($text, $x = 0, $y = 0, $size = 120, $align = BEAR_Img::LEFT, $colorOne = false, $colorTwo = false, $font = 'Arial', $textAlpha = 0.85, $lineWidth = 0.75, $slant = CAIRO_FONT_SLANT_NORMAL, $weight = CAIRO_FONT_WEIGHT_NORMAL)
 {
     //フォントカラー
     cairo_set_source_rgb($this->image, 0.0, 0.0, 1.0);
     cairo_select_font_face($this->image, $font, $slant, $weight);
     cairo_set_font_size($this->image, $size);
     $this->_fontInfo = cairo_text_extents($this->image, $text);
     $this->_log->log('cairo _fontInfo', $this->_fontInfo);
     switch ($align) {
         case BEAR_Img::CENTER:
             $x = $this->_srcWidth / 2 - $this->_fontInfo['x_advance'] / 2 + $x;
             break;
         case BEAR_Img::RIGHT:
             $x = $this->_srcWidth - $this->_fontInfo['x_advance'] - $x;
             break;
         case BEAR_Img::LEFT:
         default:
             break;
     }
     cairo_move_to($this->image, $x, $y + $size);
     cairo_text_path($this->image, $text);
     //テキスト中身
     if ($colorOne) {
         $colorOneZero = $colorOne[0] / 255;
         $colorOneOne = $colorOne[1] / 255;
         $colorOneTwo = $colorOne[2] / 255;
         cairo_set_source_rgba($this->image, $colorOneZero, $colorOneOne, $colorOneTwo, $textAlpha);
     } else {
         cairo_set_source_rgba($this->image, 1, 1, 1, $textAlpha);
     }
     cairo_fill_preserve($this->image);
     //テキストボーダー
     if ($colorTwo) {
         $colorTwoZero = $colorTwo[0] / 255;
         $colorTwoOne = $colorTwo[1] / 255;
         $colorTwoTwo = $colorTwo[2] / 255;
         cairo_set_source_rgba($this->image, $colorTwoZero, $colorTwoOne, $colorTwoTwo, $textAlpha);
     } else {
         cairo_set_source_rgba($this->image, 0, 0, 1, $textAlpha);
     }
     cairo_set_line_width($this->image, $lineWidth);
     //cairo_stroke_preserve($this->image);
     cairo_stroke($this->image);
     //cairo_show_page($this->image);
 }
Ejemplo n.º 2
0
 /**
  * Returns boundings of text depending on the available font extension
  * 
  * @param float $size Textsize
  * @param ezcGraphFontOptions $font Font
  * @param string $text Text
  * @return ezcGraphBoundings Boundings of text
  */
 protected function getTextBoundings($size, ezcGraphFontOptions $font, $text)
 {
     cairo_select_font_face($this->context, $font->name, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
     cairo_set_font_size($this->context, $size);
     $extents = cairo_text_extents($this->context, $text);
     return new ezcGraphBoundings(0, 0, $extents['width'], $extents['height']);
 }