最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP實現(xiàn)中文圓形印章特效

 更新時間:2015年06月19日 11:09:16   投稿:hebedich  
心血來潮,寫了個圓形印章生成器,字體的弧形旋轉(zhuǎn)頗費功夫。總算效果還不錯,代碼存檔。

方法一:

<?php
/*
 * 中文圓形印章類
 * @author lkk/lianq.net
 * @create on 10:03 2012-5-29
 * @example:
 * $seal = new circleSeal('你我他坐站走東西南北中',75,6,24,0,0,16,40);
 * $seal->doImg();
 */
 
class circleSeal {
  private $sealString;  //印章字符
  private $strMaxLeng;  //最大字符長度
  private $sealRadius;  //印章半徑
  private $rimWidth;   //邊框厚度
  private $innerRadius;  //內(nèi)圓半徑
  private $startRadius;  //五角星半徑
  private $startAngle;  //五角星傾斜角度
  private $backGround;  //印章顏色
  private $centerDot;   //圓心坐標(biāo)
  private $img;      //圖形資源句柄
  private $font;     //指定的字體
  private $fontSize;   //指定字體大小
  private $width;     //圖片寬度
  private $height;    //圖片高度
  private $points;    //五角星各點坐標(biāo)
  private $charRadius;  //字符串半徑
  private $charAngle;   //字符串傾斜角度
  private $spacing;    //字符間隔角度
 
  //構(gòu)造方法
  public function __construct($str ='', $rad = 75, $rmwidth = 6, $strad = 24, $stang = 0, $crang = 0, $fsize = 16, $inrad =0){
    $this->sealString  = empty($str) ? '印章測試字符串' : $str;
    $this->strMaxLeng  = 12;
    $this->sealRadius  = $rad;
    $this->rimWidth   = $rmwidth;
    $this->startRadius = $strad;
    $this->startAngle  = $stang;
    $this->charAngle  = $crang;
    $this->centerDot  = array('x'=>$rad, 'y'=>$rad);
    $this->font     = dirname(__FILE__) .'/simkai.ttf';
    $this->fontSize   = $fsize;
    $this->innerRadius = $inrad;  //默認(rèn)0,沒有
    $this->spacing   = 1;
  }
 
  //創(chuàng)建圖片資源
  private function createImg(){
    $this->width    = 2 * $this->sealRadius;
    $this->height    = 2 * $this->sealRadius;
    $this->img     = imagecreate($this->width, $this->height);
    imagecolorresolvealpha($this->img,255,255,255,127);
    $this->backGround  = imagecolorallocate($this->img,255,0,0);
  }
 
  //畫印章邊框
  private function drawRim(){
    for($i=0;$i<$this->rimWidth;$i++){
      imagearc($this->img,$this->centerDot['x'],$this->centerDot['y'],$this->width - $i,$this->height - $i,0,360,$this->backGround);
    }
  }
 
  //畫內(nèi)圓
  private function drawInnerCircle(){
    imagearc($this->img,$this->centerDot['x'],$this->centerDot['y'],2*$this->innerRadius,2*$this->innerRadius,0,360,$this->backGround);
  }
 
  //畫字符串
  private function drawString(){
    //編碼處理
    $charset = mb_detect_encoding($this->sealString);
    if($charset != 'UTF-8'){
      $this->sealString = mb_convert_encoding($this->sealString, 'UTF-8', 'GBK');
    }
 
    //相關(guān)計量
    $this->charRadius = $this->sealRadius - $this->rimWidth - $this->fontSize; //字符串半徑
    $leng  = mb_strlen($this->sealString,'utf8'); //字符串長度
    if($leng > $this->strMaxLeng) $leng = $this->strMaxLeng;
    $avgAngle  = 360 / ($this->strMaxLeng);  //平均字符傾斜度
 
    //拆分并寫入字符串
    $words = array(); //字符數(shù)組
    for($i=0;$i<$leng;$i++){
      $words[] = mb_substr($this->sealString,$i,1,'utf8');
      $r = 630 + $this->charAngle + $avgAngle*($i - $leng/2) + $this->spacing*($i-1);   //坐標(biāo)角度
      $R = 720 - $this->charAngle + $avgAngle*($leng-2*$i-1)/2 + $this->spacing*(1-$i);  //字符角度
      $x = $this->centerDot['x'] + $this->charRadius * cos(deg2rad($r)); //字符的x坐標(biāo)
      $y = $this->centerDot['y'] + $this->charRadius * sin(deg2rad($r)); //字符的y坐標(biāo)
      imagettftext($this->img, $this->fontSize, $R, $x, $y, $this->backGround, $this->font, $words[$i]);
    }
  }  
 
  //畫五角星
  private function drawStart(){
    $ang_out = 18 + $this->startAngle;
    $ang_in = 56 + $this->startAngle;
    $rad_out = $this->startRadius;
    $rad_in = $rad_out * 0.382;
    for($i=0;$i<5;$i++){
      //五個頂點坐標(biāo)
      $this->points[] = $rad_out * cos(2*M_PI/5*$i - deg2rad($ang_out)) + $this->centerDot['x'];
      $this->points[] = $rad_out * sin(2*M_PI/5*$i - deg2rad($ang_out)) + $this->centerDot['y'];
 
      //內(nèi)凹的點坐標(biāo)
      $this->points[] = $rad_in * cos(2*M_PI/5*($i+1) - deg2rad($ang_in)) + $this->centerDot['x'];
      $this->points[] = $rad_in * sin(2*M_PI/5*($i+1) - deg2rad($ang_in)) + $this->centerDot['y'];
    }
    imagefilledpolygon($this->img, $this->points, 10, $this->backGround);
  }
 
  //輸出
  private function outPut(){
    header('Content-type:image/png');
    imagepng($this->img);
    imagedestroy($this->img);
  }
 
  //對外生成
  public function doImg(){
    $this->createImg();
    $this->drawRim();
    $this->drawInnerCircle();
    $this->drawString();
    $this->drawStart();
    $this->outPut();
  }
}

方法二:

<?php
@$hos=iconv("GBK", "UTF-8", $_GET["hos"]);
if(!isset($hos))
exit;

$im=ImageCreate(150,150);
$gray=ImageColorResolveAlpha($im,200,200,200,127);
$red=ImageColorAllocate($im,230,150,150);

for($i=0;$i<6;$i++)
ImageArc($im,75,75,148-$i,148-$i,0,360,$red);

$stock='C:\WINDOWS\Fonts\simkai.ttf';
$point="★";
$size=30;
ImageTTFText($im,$size,0,72-$size/2,72+$size/2,$red,$stock,$point);

$a=75;$b=-75;//中心點坐標(biāo)
$r=65;$m=40;//半徑,角度
$size=16;//字體大小
$r=$r-$size;

$word=array();
$max=18;
$count=mb_strlen($hos,'utf8');
if($count>$max)$count=$max;
if($count>12)
$m=floor(360/$count);
else if($count>5)
$m-=$count;

for($i=0;$i<$count;$i++)
$word[]=mb_substr($hos,$i,1,'utf8');

$j=floor($count/2);
if($j!=$count/2)
{
 for($i=$j;$i>=0;$i--)
 {
 $arc=$m*($j-$i)+$size/2;
 $x=round($r*cos((90+$arc)*M_PI/180))+$a;
 $y=-1*(round($r*sin((90+$arc)*M_PI/180))+$b);
 if($arc<10)$arc=0; 
 ImageTTFText($im,$size,$arc,$x,$y,$red,$stock,$word[$i]);
 $arc=$m*($j-$i)-$size/2;
 $x=round($r*cos((90-$arc)*M_PI/180))+$a;
 $y=-1*(round($r*sin((90-$arc)*M_PI/180))+$b);
 if($arc<10)$arc=0; 
 ImageTTFText($im,$size,-$arc,$x,$y,$red,$stock,$word[$j+$j-$i]);
 }
}
else
{
 $j=$j-1;
 for($i=$j;$i>=0;$i--)
 {
 $arc=$m/2+$m*($j-$i)+$size/2;
 $x=round($r*cos((90+$arc)*M_PI/180))+$a;
 $y=-1*(round($r*sin((90+$arc)*M_PI/180))+$b);
 ImageTTFText($im,$size,$arc,$x,$y,$red,$stock,$word[$i]); 
 $arc=$m/2+$m*($j-$i)-$size/2;
 $x=round($r*cos((90-$arc)*M_PI/180))+$a;
 $y=-1*(round($r*sin((90-$arc)*M_PI/180))+$b);
 ImageTTFText($im,$size,-$arc,$x,$y,$red,$stock,$word[$j+$j+1-$i]);
 }
}

header('Content-Type:image/png');
ImagePNG($im);
?>

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡

相關(guān)文章

  • Laravel5中防止XSS跨站攻擊的方法

    Laravel5中防止XSS跨站攻擊的方法

    這篇文章主要介紹了Laravel5中防止XSS跨站攻擊的方法,結(jié)合實例形式分析了Laravel5基于Purifier擴(kuò)展包集成HTMLPurifier防止XSS跨站攻擊的相關(guān)操作技巧,需要的朋友可以參考下
    2016-10-10
  • Yii框架布局文件的動態(tài)切換操作示例

    Yii框架布局文件的動態(tài)切換操作示例

    這篇文章主要介紹了Yii框架布局文件的動態(tài)切換操作,結(jié)合實例形式分析了Yii框架控制器動態(tài)切換布局的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-11-11
  • php隨機(jī)輸出名人名言的代碼

    php隨機(jī)輸出名人名言的代碼

    正如你看到的“小談博客”標(biāo)題后面的名人名言一樣,每刷新一次就會隨機(jī)出現(xiàn)一條語句,把你喜歡的話放到一起,經(jīng)常出現(xiàn)在你眼前,給你溫暖的力量
    2012-10-10
  • laravel實現(xiàn)Auth認(rèn)證,登錄、注冊后的頁面回跳方法

    laravel實現(xiàn)Auth認(rèn)證,登錄、注冊后的頁面回跳方法

    今天小編就為大家分享一篇laravel實現(xiàn)Auth認(rèn)證,登錄、注冊后的頁面回跳方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 初識ThinkPHP控制器

    初識ThinkPHP控制器

    這篇文章主要帶大家了解ThinkPHP控制器的基本定義、基本操作,配置ACTION_SUFFIX,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Smarty保留變量用法分析

    Smarty保留變量用法分析

    這篇文章主要介紹了Smarty保留變量用法,較為詳細(xì)的介紹了Smarty常見保留變量的功能與使用方法,需要的朋友可以參考下
    2016-05-05
  • PHP通用分頁類page.php[仿google分頁]

    PHP通用分頁類page.php[仿google分頁]

    PHP通用分頁類。本代碼是用于分頁用的,稍做修改可用于各種程序。 使用方式請參考本人文章。
    2008-08-08
  • Laravel 框架路由原理與路由訪問實例分析

    Laravel 框架路由原理與路由訪問實例分析

    這篇文章主要介紹了Laravel 框架路由原理與路由訪問,結(jié)合實例形式分析了Laravel 框架路由的基本概念、原理、路由訪問方法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • php實現(xiàn)ffmpeg處理視頻的實踐

    php實現(xiàn)ffmpeg處理視頻的實踐

    本文主要介紹了php實現(xiàn)ffmpeg處理視頻的實踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • php獲取小程序碼的實現(xiàn)代碼(B類接口)

    php獲取小程序碼的實現(xiàn)代碼(B類接口)

    這篇文章主要介紹了php獲取小程序碼的實現(xiàn)代碼(B類接口),需要的朋友可以參考下
    2020-06-06

最新評論

喀什市| 文山县| 四平市| 长武县| 准格尔旗| 蕉岭县| 邯郸县| 韶关市| 朔州市| 晋城| 华亭县| 仲巴县| 青田县| 紫云| 弥渡县| 夏河县| 梅州市| 宝清县| 洪雅县| 甘孜| 朔州市| 保靖县| 雷山县| 桐柏县| 信宜市| 云和县| 广灵县| 乡城县| 贵阳市| 张掖市| 顺平县| 冷水江市| 陇南市| 阜阳市| 锡林浩特市| 玉屏| 肇州县| 尉犁县| 江北区| 梓潼县| 泽普县|