国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

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

2024-05-04 23:36:34
字體:
來源:轉載
供稿:網友

心血來潮,寫了個圓形印章生成器,字體的弧形旋轉頗費功夫??偹阈Ч€不錯,代碼存檔。

方法一:

 

 
  1. <?php 
  2. /* 
  3. * 中文圓形印章類 
  4. * @author lkk/lianq.net 
  5. * @create on 10:03 2012-5-29 
  6. * @example: 
  7. * $seal = new circleSeal('你我他坐站走東西南北中',75,6,24,0,0,16,40); 
  8. * $seal->doImg(); 
  9. */ 
  10.  
  11. class circleSeal { 
  12. private $sealString; //印章字符 
  13. private $strMaxLeng; //最大字符長度 
  14. private $sealRadius; //印章半徑 
  15. private $rimWidth; //邊框厚度 
  16. private $innerRadius; //內圓半徑 
  17. private $startRadius; //五角星半徑 
  18. private $startAngle; //五角星傾斜角度 
  19. private $backGround; //印章顏色 
  20. private $centerDot; //圓心坐標 
  21. private $img; //圖形資源句柄 
  22. private $font; //指定的字體 
  23. private $fontSize; //指定字體大小 
  24. private $width; //圖片寬度 
  25. private $height; //圖片高度 
  26. private $points; //五角星各點坐標 
  27. private $charRadius; //字符串半徑 
  28. private $charAngle; //字符串傾斜角度 
  29. private $spacing; //字符間隔角度 
  30.  
  31. //構造方法 
  32. public function __construct($str ='', $rad = 75, $rmwidth = 6, $strad = 24, $stang = 0, $crang = 0, $fsize = 16, $inrad =0){ 
  33. $this->sealString = empty($str) ? '印章測試字符串' : $str; 
  34. $this->strMaxLeng = 12; 
  35. $this->sealRadius = $rad; 
  36. $this->rimWidth = $rmwidth; 
  37. $this->startRadius = $strad; 
  38. $this->startAngle = $stang; 
  39. $this->charAngle = $crang; 
  40. $this->centerDot = array('x'=>$rad, 'y'=>$rad); 
  41. $this->font = dirname(__FILE__) .'/simkai.ttf'
  42. $this->fontSize = $fsize; 
  43. $this->innerRadius = $inrad; //默認0,沒有 
  44. $this->spacing = 1; 
  45.  
  46. //創(chuàng)建圖片資源 
  47. private function createImg(){ 
  48. $this->width = 2 * $this->sealRadius; 
  49. $this->height = 2 * $this->sealRadius; 
  50. $this->img = imagecreate($this->width, $this->height); 
  51. imagecolorresolvealpha($this->img,255,255,255,127); 
  52. $this->backGround = imagecolorallocate($this->img,255,0,0); 
  53.  
  54. //畫印章邊框 
  55. private function drawRim(){ 
  56. for($i=0;$i<$this->rimWidth;$i++){ 
  57. imagearc($this->img,$this->centerDot['x'],$this->centerDot['y'],$this->width - $i,$this->height - $i,0,360,$this->backGround); 
  58.  
  59. //畫內圓 
  60. private function drawInnerCircle(){ 
  61. imagearc($this->img,$this->centerDot['x'],$this->centerDot['y'],2*$this->innerRadius,2*$this->innerRadius,0,360,$this->backGround); 
  62.  
  63. //畫字符串 
  64. private function drawString(){ 
  65. //編碼處理 
  66. $charset = mb_detect_encoding($this->sealString); 
  67. if($charset != 'UTF-8'){ 
  68. $this->sealString = mb_convert_encoding($this->sealString, 'UTF-8''GBK'); 
  69.  
  70. //相關計量 
  71. $this->charRadius = $this->sealRadius - $this->rimWidth - $this->fontSize; //字符串半徑 
  72. $leng = mb_strlen($this->sealString,'utf8'); //字符串長度 
  73. if($leng > $this->strMaxLeng) $leng = $this->strMaxLeng; 
  74. $avgAngle = 360 / ($this->strMaxLeng); //平均字符傾斜度 
  75.  
  76. //拆分并寫入字符串 
  77. $words = array(); //字符數(shù)組 
  78. for($i=0;$i<$leng;$i++){ 
  79. $words[] = mb_substr($this->sealString,$i,1,'utf8'); 
  80. $r = 630 + $this->charAngle + $avgAngle*($i - $leng/2) + $this->spacing*($i-1); //坐標角度 
  81. $R = 720 - $this->charAngle + $avgAngle*($leng-2*$i-1)/2 + $this->spacing*(1-$i); //字符角度 
  82. $x = $this->centerDot['x'] + $this->charRadius * cos(deg2rad($r)); //字符的x坐標 
  83. $y = $this->centerDot['y'] + $this->charRadius * sin(deg2rad($r)); //字符的y坐標 
  84. imagettftext($this->img, $this->fontSize, $R, $x, $y, $this->backGround, $this->font, $words[$i]); 
  85. }  
  86.  
  87. //畫五角星 
  88. private function drawStart(){ 
  89. $ang_out = 18 + $this->startAngle; 
  90. $ang_in = 56 + $this->startAngle; 
  91. $rad_out = $this->startRadius; 
  92. $rad_in = $rad_out * 0.382; 
  93. for($i=0;$i<5;$i++){ 
  94. //五個頂點坐標 
  95. $this->points[] = $rad_out * cos(2*M_PI/5*$i - deg2rad($ang_out)) + $this->centerDot['x']; 
  96. $this->points[] = $rad_out * sin(2*M_PI/5*$i - deg2rad($ang_out)) + $this->centerDot['y']; 
  97.  
  98. //內凹的點坐標 
  99. $this->points[] = $rad_in * cos(2*M_PI/5*($i+1) - deg2rad($ang_in)) + $this->centerDot['x']; 
  100. $this->points[] = $rad_in * sin(2*M_PI/5*($i+1) - deg2rad($ang_in)) + $this->centerDot['y']; 
  101. imagefilledpolygon($this->img, $this->points, 10, $this->backGround); 
  102.  
  103. //輸出 
  104. private function outPut(){ 
  105. header('Content-type:image/png'); 
  106. imagepng($this->img); 
  107. imagedestroy($this->img); 
  108.  
  109. //對外生成 
  110. public function doImg(){ 
  111. $this->createImg(); 
  112. $this->drawRim(); 
  113. $this->drawInnerCircle(); 
  114. $this->drawString(); 
  115. $this->drawStart(); 
  116. $this->outPut(); 

方法二:

 

 
  1. <?php 
  2. @$hos=iconv("GBK""UTF-8", $_GET["hos"]); 
  3. if(!isset($hos)) 
  4. exit; 
  5.  
  6. $im=ImageCreate(150,150); 
  7. $gray=ImageColorResolveAlpha($im,200,200,200,127); 
  8. $red=ImageColorAllocate($im,230,150,150); 
  9.  
  10. for($i=0;$i<6;$i++) 
  11. ImageArc($im,75,75,148-$i,148-$i,0,360,$red); 
  12.  
  13. $stock='C:/WINDOWS/Fonts/simkai.ttf'
  14. $point="★"
  15. $size=30; 
  16. ImageTTFText($im,$size,0,72-$size/2,72+$size/2,$red,$stock,$point); 
  17.  
  18. $a=75;$b=-75;//中心點坐標 
  19. $r=65;$m=40;//半徑,角度 
  20. $size=16;//字體大小 
  21. $r=$r-$size; 
  22.  
  23. $word=array(); 
  24. $max=18; 
  25. $count=mb_strlen($hos,'utf8'); 
  26. if($count>$max)$count=$max; 
  27. if($count>12) 
  28. $m=floor(360/$count); 
  29. else if($count>5) 
  30. $m-=$count; 
  31.  
  32. for($i=0;$i<$count;$i++) 
  33. $word[]=mb_substr($hos,$i,1,'utf8'); 
  34.  
  35. $j=floor($count/2); 
  36. if($j!=$count/2) 
  37. for($i=$j;$i>=0;$i--) 
  38. $arc=$m*($j-$i)+$size/2; 
  39. $x=round($r*cos((90+$arc)*M_PI/180))+$a; 
  40. $y=-1*(round($r*sin((90+$arc)*M_PI/180))+$b); 
  41. if($arc<10)$arc=0;  
  42. ImageTTFText($im,$size,$arc,$x,$y,$red,$stock,$word[$i]); 
  43. $arc=$m*($j-$i)-$size/2; 
  44. $x=round($r*cos((90-$arc)*M_PI/180))+$a; 
  45. $y=-1*(round($r*sin((90-$arc)*M_PI/180))+$b); 
  46. if($arc<10)$arc=0;  
  47. ImageTTFText($im,$size,-$arc,$x,$y,$red,$stock,$word[$j+$j-$i]); 
  48. else 
  49. $j=$j-1; 
  50. for($i=$j;$i>=0;$i--) 
  51. $arc=$m/2+$m*($j-$i)+$size/2; 
  52. $x=round($r*cos((90+$arc)*M_PI/180))+$a; 
  53. $y=-1*(round($r*sin((90+$arc)*M_PI/180))+$b); 
  54. ImageTTFText($im,$size,$arc,$x,$y,$red,$stock,$word[$i]);  
  55. $arc=$m/2+$m*($j-$i)-$size/2; 
  56. $x=round($r*cos((90-$arc)*M_PI/180))+$a; 
  57. $y=-1*(round($r*sin((90-$arc)*M_PI/180))+$b); 
  58. ImageTTFText($im,$size,-$arc,$x,$y,$red,$stock,$word[$j+$j+1-$i]); 
  59.  
  60. header('Content-Type:image/png'); 
  61. ImagePNG($im); 
  62. ?> 

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 侯马市| 汤阴县| 历史| 阜宁县| 新田县| 涡阳县| 县级市| 墨脱县| 息烽县| 华亭县| 平乡县| 太保市| 道孚县| 安新县| 宣恩县| 大兴区| 五指山市| 望都县| 阳西县| 北京市| 太康县| 屏边| 宁武县| 高淳县| 始兴县| 新兴县| 石门县| 呈贡县| 万盛区| 睢宁县| 古浪县| 台北市| 田东县| 穆棱市| 集安市| 巴中市| 江安县| 全椒县| 岑溪市| 苏尼特右旗| 前郭尔|