搜尋
首頁php教程php手册PHP实现中文圆形印章特效

心血来潮,写了个圆形印章生成器,字体的弧形旋转颇费功夫。总算效果还不错,代码存档。

方法一:

doImg(); */ class circleSeal { private $sealString; //印章字符 private $strMaxLeng; //最大字符长度 private $sealRadius; //印章半径 private $rimWidth; //边框厚度 private $innerRadius; //内圆半径 private $startRadius; //五角星半径 private $startAngle; //五角星倾斜角度 private $backGround; //印章颜色 private $centerDot; //圆心坐标 private $img; //图形资源句柄 private $font; //指定的字体 private $fontSize; //指定字体大小 private $width; //图片宽度 private $height; //图片高度 private $points; //五角星各点坐标 private $charRadius; //字符串半径 private $charAngle; //字符串倾斜角度 private $spacing; //字符间隔角度 //构造方法 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; //默认0,没有 $this->spacing = 1; } //创建图片资源 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;$irimWidth;$i++){ imagearc($this->img,$this->centerDot['x'],$this->centerDot['y'],$this->width - $i,$this->height - $i,0,360,$this->backGround); } } //画内圆 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'); } //相关计量 $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(); //字符数组 for($i=0;$isealString,$i,1,'utf8'); $r = 630 + $this->charAngle + $avgAngle*($i - $leng/2) + $this->spacing*($i-1); //坐标角度 $R = 720 - $this->charAngle + $avgAngle*($leng-2*$i-1)/2 + $this->spacing*(1-$i); //字符角度 $x = $this->centerDot['x'] + $this->charRadius * cos(deg2rad($r)); //字符的x坐标 $y = $this->centerDot['y'] + $this->charRadius * sin(deg2rad($r)); //字符的y坐标 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;$ipoints[] = $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']; //内凹的点坐标 $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(); } }

方法二:

$max)$count=$max; if($count>12) $m=floor(360/$count); else if($count>5) $m-=$count; for($i=0;$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=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); ?>

以上所述就是本文的全部内容了,,希望大家能够喜欢

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。