中国の丸印を実装するための PHP クラス

WBOY
リリース: 2016-07-25 08:43:12
オリジナル
1107 人が閲覧しました
  1. /*
  2. * 中国の丸印カテゴリ
  3. * @author lkk/lianq.net
  4. * @create on 10:03 2012-5-29
  5. * @example:
  6. * $seal = new CircleSeal('あなたと私は東、西、北、南、中央に座って歩きます',75,6,24,0,0,16,40);
  7. * $seal->doImg();
  8. */
  9. class CircleSeal {
  10. private $sealString; // 文字の最大長
  11. private $sealRadius; // 境界線の太さ
  12. private $innerRadius; radius
  13. private $startRadius ; // 五芒星の半径
  14. private $startAngle; // シールの色
  15. private $centerDot; private $img; private $font; // 指定されたフォント
  16. private $fontSize; // 指定されたフォント サイズ
  17. private $width; // 画像の高さ
  18. private $points; -尖った星
  19. private $charRadius; //文字列の半径
  20. private $charAngle; //文字間隔の角度
  21. //構築方法
  22. public function __construct($str ='', $ rad = 75、$rmwidth = 6、$strad = 24、$stang = 0、$crang = 0、$fsize = 16、$inrad =0){
  23. $this->sealString = empty($str) 'シール テスト文字列' : $str;
  24. $this->strMaxLeng = 12;
  25. $this->sealRadius = $rad;
  26. $this->rimWidth = $rmwidth;
  27. $this->startRadius = $strad ;
  28. $this->startAngle = $stang;
  29. $this->charAngle = $crang;
  30. $this->centerDot = array('x'=>$rad, 'y'=>$rad );
  31. $this ->font = dirname(__FILE__) .'/simkai.ttf';
  32. $this->fontSize = $fsize;
  33. $this->innerRadius = $inrad; //デフォルトは 0、いいえ
  34. $this->spacing = 1;
  35. }
  36. //画像リソースを作成
  37. private function createImg(){
  38. $this->width = 2 * $this->sealRadius;
  39. $this->height = 2 * $this ->sealRadius;
  40. $this->img = imagecreate($this->width, $this->height);
  41. imagecolorresolvealpha($this->img,255,255,255,127);
  42. $ this->backGround = imagecolorallocate($this->img,255,0,0);
  43. }
  44. //シール枠を描画
  45. private functiondrawRim(){
  46. for($i=0;$i< $this->rimWidth ;$i++){
  47. imagearc($this->img,$this->centerDot['x'],$this->centerDot['y'],$this-> width - $i,$ this->height - $i,0,360,$this->backGround);
  48. }
  49. }
  50. //内側の円を描く
  51. private functiondrawInnerCircle(){
  52. imagearc($this- >img,$this- >centerDot['x'],$this->centerDot['y'],2*$this->innerRadius,2*$this->innerRadius,0,360,$this ->backGround);
  53. }
  54. //文字列を描画
  55. プライベート関数drawString(){
  56. //エンコード処理
  57. $charset = mb_detect_encoding($this->sealString);
  58. if($charset != 'UTF -8'){
  59. $ this->sealString = mb_convert_encoding($this->sealString, 'UTF-8', 'GBK');
  60. }
  61. //関連する測定
  62. $this->charRadius = $ this->sealRadius - $this->rimWidth - $this->fontSize; //文字列の半径
  63. $leng = mb_strlen($this->sealString,'utf8') //文字列の長さ
  64. if($ leng > $this ->strMaxLeng) $leng = $this->strMaxLeng;
  65. $avgAngle = 360 / ($this->strMaxLeng) //文字列を分割して書き込む
  66. $ Words = array(); //文字配列
  67. for($i=0;$i $words[] = mb_substr($this->sealString,$i,1,'utf8 ' );
  68. $r = 630 + $this->charAngle + $avgAngle*($i - $leng/2) + $this->spacing*($i-1); //座標角度
  69. $R; = 720 - $this->charAngle + $avgAngle*($leng-2*$i-1)/2 + $this->spacing*(1-$i); //文字角度
  70. $x = $ this ->centerDot['x'] + $this->charRadius * cos(deg2rad($r)); //文字の x 座標
  71. $y = $this->centerDot['y'] + $this ->charRadius * sin(deg2rad($r)) //文字の y 座標
  72. imagettftext($this->img, $this->fontSize, $R, $x, $y , $this-> ;backGround, $this->font, $words[$i]);
  73. }
  74. }
  75. //画五角星
  76. プライベート関数drawStart(){
  77. $ang_out = 18 + $this->startAngle;
  78. $ang_in = 56 + $this->startAngle;
  79. $rad_out = $this->startRadius ;
  80. $rad_in = $rad_out * 0.382;
  81. for($i=0;$i<5;$i++){
  82. //五个顶点坐标
  83. $this->points[] = $rad_out * cos(2 *M_PI/5*$i - deg2rad($ang_out)) + $this->centerDot['x'];
  84. $this->points[] = $rad_out * sin(2*M_PI/5*$i - deg2rad($ang_out)) + $this->centerDot['y'];
  85. //内凹の点座標标
  86. $this->points[] = $rad_in * cos(2*M_PI/5* ($i+1) - deg2rad($ang_in)) + $this->centerDot['x'];
  87. $this->points[] = $rad_in * sin(2*M_PI/5*($i +1) - deg2rad($ang_in)) + $this->centerDot['y'];
  88. }
  89. imagefilledpolygon($this->img, $this->points, 10, $this->backGround );
  90. }
  91. //出出
  92. プライベート関数outPut(){
  93. header('Content-type:image/png');
  94. imagepng($this->img);
  95. imagedestroy($this->gt;img );
  96. }
  97. //对外生成
  98. public function doImg(){
  99. $this->createImg();
  100. $this->drawRim();
  101. $this->drawInnerCircle();
  102. $this ->drawString();
  103. $this->drawStart();
  104. $this->outPut();
  105. }
  106. }
复制代

PHP


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート