├── .gitignore ├── app ├── application ├── Assets │ ├── backgrounds │ │ └── .gitignore │ └── fonts │ │ └── .gitignore ├── Codes │ └── Captcha.php ├── Command │ ├── CaptchaGeneratorCommand.php │ ├── DefaultCommand.php │ ├── FormatFontCommand.php │ └── TestFontCommand.php └── Kernel.php ├── composer.json ├── composer.lock ├── data └── .gitignore ├── demo.png └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | /.idea 3 | .env 4 | -------------------------------------------------------------------------------- /app: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | run(); -------------------------------------------------------------------------------- /application/Assets/backgrounds/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /application/Assets/fonts/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /application/Codes/Captcha.php: -------------------------------------------------------------------------------- 1 | phrase(); 50 | 51 | $this->files = new Filesystem(); 52 | 53 | $this->fonts = $this->files->files(__DIR__ . '/../Assets/fonts'); 54 | 55 | $this->fonts = array_filter($this->fonts, function ($file) { 56 | if ($file->getExtension() == 'ttf') { 57 | return true; 58 | } 59 | 60 | return false; 61 | }); 62 | 63 | $this->fonts = array_map(function ($file) { 64 | return $file->getPathName(); 65 | }, $this->fonts); 66 | 67 | $this->fonts = array_values($this->fonts); //reset fonts array index 68 | 69 | $this->backgrounds = $this->files->files(__DIR__ . '/../Assets/backgrounds'); 70 | $this->backgrounds = array_filter($this->backgrounds, function ($file) { 71 | if ($file->getExtension() == 'png' || $file->getExtension() == 'jpg' || $file->getExtension() == 'jpeg' || $file->getExtension() == 'bmp') { 72 | return true; 73 | } 74 | 75 | return false; 76 | }); 77 | $this->backgrounds = array_map(function ($file) { 78 | return $file->getPathName(); 79 | }, $this->backgrounds); 80 | 81 | $this->backgrounds = array_values($this->backgrounds); //reset fonts array index 82 | 83 | $this->backgrounds_count = count($this->backgrounds); 84 | 85 | 86 | dump("共" . count($this->backgrounds) . '张图片,' . count($this->fonts) . '个字体文件。'); 87 | } 88 | 89 | public function phrase($length = 4, $charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') 90 | { 91 | if ($length !== null) { 92 | $this->length = $length; 93 | } 94 | if ($charset !== null) { 95 | $this->charset = $charset; 96 | } 97 | 98 | $phrase = ''; 99 | $chars = str_split($this->charset); 100 | 101 | for ($i = 0; $i < $this->length; $i++) { 102 | $phrase .= $chars[ array_rand($chars) ]; 103 | } 104 | 105 | $this->phrase = $phrase; 106 | 107 | return $this; 108 | } 109 | 110 | public function getFonts() 111 | { 112 | return $this->fonts; 113 | } 114 | 115 | public function rand($min, $max) 116 | { 117 | if (!is_array($this->fingerprint)) { 118 | $this->fingerprint = []; 119 | } 120 | 121 | if ($this->useFingerprint) { 122 | $value = current($this->fingerprint); 123 | next($this->fingerprint); 124 | } else { 125 | $value = mt_rand($min, $max); 126 | $this->fingerprint[] = $value; 127 | } 128 | 129 | return $value; 130 | } 131 | 132 | public function save($filename, $quality = 90) 133 | { 134 | $path = dirname($filename); 135 | if (!file_exists($path)) { 136 | mkdir($path, 0777, true); 137 | } 138 | imagejpeg($this->contents, $filename, $quality); 139 | } 140 | 141 | public function getCoordinate() 142 | { 143 | return $this->coordinate; 144 | } 145 | 146 | protected function font() 147 | { 148 | return $this->fonts[ rand(0, count($this->fonts) - 1) ]; 149 | } 150 | 151 | protected function validateBackgroundImage($backgroundImage) 152 | { 153 | // check if file exists 154 | if (!file_exists($backgroundImage)) { 155 | $backgroundImageExploded = explode('/', $backgroundImage); 156 | $imageFileName = count($backgroundImageExploded) > 1 ? $backgroundImageExploded[ count($backgroundImageExploded) - 1 ] : $backgroundImage; 157 | 158 | throw new Exception('Invalid background image: ' . $imageFileName); 159 | } 160 | 161 | // check image type 162 | $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension 163 | $imageType = finfo_file($finfo, $backgroundImage); 164 | finfo_close($finfo); 165 | 166 | if (!in_array($imageType, $this->allowedBackgroundImageTypes)) { 167 | throw new Exception('Invalid background image type! Allowed types are: ' . join(', ', $this->allowedBackgroundImageTypes)); 168 | } 169 | 170 | return $imageType; 171 | } 172 | 173 | protected function createBackgroundImageFromType($backgroundImage, $imageType) 174 | { 175 | switch ($imageType) { 176 | case 'image/jpeg': 177 | $image = imagecreatefromjpeg($backgroundImage); 178 | break; 179 | case 'image/png': 180 | $image = imagecreatefrompng($backgroundImage); 181 | break; 182 | case 'image/gif': 183 | $image = imagecreatefromgif($backgroundImage); 184 | break; 185 | 186 | default: 187 | throw new Exception('Not supported file type for background image!'); 188 | break; 189 | } 190 | 191 | $finfo = getimagesize($backgroundImage); 192 | $finfo['width'] = $finfo[0]; 193 | $finfo['height'] = $finfo[1]; 194 | 195 | $dist_img = imagecreatetruecolor($this->width, $this->height); 196 | 197 | 198 | if ($finfo['width'] < $this->width && $finfo['height'] < $this->height) { 199 | imagecopyresampled($dist_img, $image, 0, 0, 0, 0, $this->width, $this->height, $finfo['width'], $finfo['height']); 200 | } elseif ($finfo['width'] < $this->width) { 201 | imagecopyresampled($dist_img, $image, 0, 0, 0, 0, $this->width, $this->height, $finfo['width'], $this->height); 202 | } elseif ($finfo['height'] < $this->height) { 203 | imagecopyresampled($dist_img, $image, 0, 0, 0, 0, $this->width, $this->height, $this->width, $finfo['height']); 204 | } else { 205 | //随机图片的随机位置 206 | $max_x = $finfo['width'] - $this->width; 207 | $max_y = $finfo['height'] - $this->height; 208 | 209 | $x = $this->rand(0, $max_x); 210 | $y = $this->rand(0, $max_y); 211 | 212 | imagecopyresampled($dist_img, $image, 0, 0, $x, $y, $this->width, $this->height, $this->width, $this->height); 213 | } 214 | 215 | return $dist_img; 216 | } 217 | 218 | 219 | public function build($width = 200, $height = 80, $font = null, $length = 4, $fingerprint = null) 220 | { 221 | if (null !== $fingerprint) { 222 | $this->fingerprint = $fingerprint; 223 | $this->useFingerprint = true; 224 | } else { 225 | $this->fingerprint = []; 226 | $this->useFingerprint = false; 227 | } 228 | 229 | $this->length = $length; 230 | 231 | $this->coordinate = []; 232 | $this->phrase($length); 233 | 234 | $this->width = $width; 235 | $this->height = $height; 236 | 237 | if (!$font) { 238 | $font = $this->font(); 239 | } 240 | 241 | if (empty($this->backgrounds) || $this->rand(0, $this->backgrounds_count) == 0) { 242 | // if background images list is not set, use a color fill as a background 243 | $image = imagecreatetruecolor($width, $height); 244 | if ($this->backgroundColor == null) { 245 | $bg = imagecolorallocate($image, $this->rand(0, 254), $this->rand(0, 254), $this->rand(0, 254)); 246 | } else { 247 | $color = $this->backgroundColor; 248 | $bg = imagecolorallocate($image, $color[0], $color[1], $color[2]); 249 | } 250 | imagefill($image, 0, 0, $bg); 251 | } else { 252 | // use a random background image 253 | 254 | $randomBackgroundImage = $this->backgrounds[ rand(0, count($this->backgrounds) - 1) ]; 255 | 256 | $imageType = $this->validateBackgroundImage($randomBackgroundImage); 257 | 258 | $image = $this->createBackgroundImageFromType($randomBackgroundImage, $imageType); 259 | } 260 | 261 | 262 | if ($this->rand(0, 10) == 0) { 263 | $this->lines($image); 264 | } 265 | 266 | if ($this->rand(0, 10) == 0) { 267 | $this->writeNoise($image); 268 | } 269 | 270 | if ($this->rand(0, 10) == 0) { 271 | $this->createDot($image); 272 | } 273 | 274 | $this->postEffectBefore($image); 275 | 276 | $color = $this->writePhrase($image, $this->phrase, $font); 277 | 278 | $this->postEffect($image); 279 | 280 | if ($this->rand(0, 10) == 0) { 281 | $this->lines($image, $color); 282 | } 283 | 284 | if ($this->rand(0, 10) == 0) { 285 | $this->writeCurve($image); 286 | } 287 | 288 | 289 | // Distort the image 290 | if ($this->distortion && $this->rand(0, 10) == 0) { 291 | $image = $this->distort($image, $width, $height, null); 292 | } 293 | 294 | // $this->line($image, $color); 295 | 296 | $this->contents = $image; 297 | 298 | return $this; 299 | } 300 | 301 | public function buildTestFont($width = 200, $height = 80, $font = null, $phrase = null, $length = 4) 302 | { 303 | $this->length = $length; 304 | $this->coordinate = []; 305 | $this->width = $width; 306 | $this->height = $height; 307 | 308 | if ($phrase) { 309 | $this->phrase = $phrase; 310 | $this->length = strlen($phrase); 311 | } else { 312 | $this->phrase($length); 313 | } 314 | 315 | if (!$font) { 316 | $font = $this->font(); 317 | } 318 | 319 | $image = imagecreatetruecolor($width, $height); 320 | $bg = imagecolorallocate($image, 250, 250, 250); 321 | imagefill($image, 0, 0, $bg); 322 | 323 | $this->writePhrase($image, $this->phrase, $font); 324 | 325 | $this->contents = $image; 326 | 327 | return $this; 328 | } 329 | 330 | protected function lines($image, $color = null) 331 | { 332 | $square = $this->width * $this->height; 333 | $effects = $this->rand($square / 3000, $square / 2000); 334 | 335 | // set the maximum number of lines to draw in front of the text 336 | if ($this->maxFrontLines != null && $this->maxFrontLines > 0) { 337 | $effects = min($this->maxFrontLines, $effects); 338 | } 339 | 340 | if ($this->maxFrontLines !== 0) { 341 | for ($e = 0; $e < $effects; $e++) { 342 | $this->drawLine($image, $this->width, $this->height, $color); 343 | } 344 | } 345 | } 346 | 347 | protected function createDot($image) 348 | { 349 | for ($i = 0; $i < 6; $i++) { 350 | $color = imagecolorallocate($image, mt_rand(0, 254), mt_rand(0, 254), mt_rand(0, 254)); 351 | imageline($image, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color); 352 | } 353 | for ($i = 0; $i < 100; $i++) { 354 | $color = imagecolorallocate($image, mt_rand(0, 254), mt_rand(0, 254), mt_rand(0, 254)); 355 | imagestring($image, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), '*', $color); 356 | } 357 | } 358 | 359 | protected function writeCurve($image) 360 | { 361 | $A = mt_rand(1, $this->height / 2); // 振幅 362 | $b = mt_rand(-$this->height / 4, $this->height / 4); // Y轴方向偏移量 363 | $f = mt_rand(-$this->height / 4, $this->height / 4); // X轴方向偏移量 364 | $T = mt_rand($this->height * 1.5, $this->width * 2); // 周期 365 | $w = (2 * M_PI) / $T; 366 | 367 | $px1 = 0; //曲线横坐标起始位置 368 | $px2 = mt_rand($this->width / 2, $this->width * 0.667); // 曲线横坐标结束位置 369 | for ($px = $px1; $px <= $px2; $px = $px + 0.9) { 370 | if ($w != 0) { 371 | $py = $A * sin($w * $px + $f) + $b + $this->height / 2; // y = Asin(ωx+φ) + b 372 | // $i = (int) (($this->width / $this->length - 6)/4); 373 | $i = (int)abs((($this->height / 3 - 8) / 4)); 374 | while ($i > 0) { 375 | imagesetpixel($image, $px + $i, $py + $i, $this->color); 376 | //这里画像素点比imagettftext和imagestring性能要好很多 377 | $i--; 378 | } 379 | } 380 | } 381 | 382 | $A = mt_rand(1, $this->height / 2); // 振幅 383 | $f = mt_rand(-$this->height / 4, $this->height / 4); // X轴方向偏移量 384 | $T = mt_rand($this->height * 1.5, $this->width * 2); // 周期 385 | $w = (2 * M_PI) / $T; 386 | $b = $py - $A * sin($w * $px + $f) - $this->height / 2; 387 | $px1 = $px2; 388 | $px2 = $this->width; 389 | for ($px = $px1; $px <= $px2; $px = $px + 0.9) { 390 | if ($w != 0) { 391 | $py = $A * sin($w * $px + $f) + $b + $this->height / 2; // y = Asin(ωx+φ) + b 392 | $i = (int)abs((($this->height / 3 - 8) / 4)); 393 | while ($i > 0) { 394 | imagesetpixel($image, $px + $i, $py + $i, $this->color); 395 | //这里(while)循环画像素点比imagettftext和imagestring用字体大小一次画出 396 | //的(不用while循环)性能要好很多 397 | $i--; 398 | } 399 | } 400 | } 401 | } 402 | 403 | protected function writeNoise($image) 404 | { 405 | for ($i = 0; $i < 10; $i++) { 406 | //杂点颜色 407 | $noiseColor = imagecolorallocate( 408 | $image, 409 | mt_rand(150, 225), 410 | mt_rand(150, 225), 411 | mt_rand(150, 225) 412 | ); 413 | for ($j = 0; $j < 5; $j++) { 414 | // 绘杂点 415 | // imagestring( 416 | // $image, 417 | // 5, 418 | // mt_rand(-10, $this->width), 419 | // mt_rand(-10, $this->height), 420 | // $this->charset[ mt_rand(0, 28) ], // 杂点文本为随机的字母或数字 421 | // $noiseColor 422 | // ); 423 | 424 | \imagettftext( 425 | $image, 426 | $this->height / 15, 427 | mt_rand(-40, 40), 428 | mt_rand(-10, $this->width), 429 | mt_rand(-10, $this->height), 430 | $noiseColor, 431 | $this->font(), 432 | $this->charset[ mt_rand(0, strlen($this->charset) - 1) ] 433 | ); 434 | } 435 | } 436 | } 437 | 438 | public function distort($image, $width, $height, $bg) 439 | { 440 | $contents = imagecreatetruecolor($width, $height); 441 | $X = $this->rand(0, $width); 442 | $Y = $this->rand(0, $height); 443 | $phase = $this->rand(0, 10); 444 | $scale = 1.1 + $this->rand(0, 10000) / 30000; 445 | for ($x = 0; $x < $width; $x++) { 446 | for ($y = 0; $y < $height; $y++) { 447 | $Vx = $x - $X; 448 | $Vy = $y - $Y; 449 | $Vn = sqrt($Vx * $Vx + $Vy * $Vy); 450 | 451 | if ($Vn != 0) { 452 | $Vn2 = $Vn + 4 * sin($Vn / 30); 453 | $nX = $X + ($Vx * $Vn2 / $Vn); 454 | $nY = $Y + ($Vy * $Vn2 / $Vn); 455 | } else { 456 | $nX = $X; 457 | $nY = $Y; 458 | } 459 | $nY = $nY + $scale * sin($phase + $nX * 0.2); 460 | 461 | if ($this->interpolation) { 462 | $p = $this->interpolate( 463 | $nX - floor($nX), 464 | $nY - floor($nY), 465 | $this->getCol($image, floor($nX), floor($nY), $bg), 466 | $this->getCol($image, ceil($nX), floor($nY), $bg), 467 | $this->getCol($image, floor($nX), ceil($nY), $bg), 468 | $this->getCol($image, ceil($nX), ceil($nY), $bg) 469 | ); 470 | } else { 471 | $p = $this->getCol($image, round($nX), round($nY), $bg); 472 | } 473 | 474 | if ($p == 0) { 475 | $p = $bg; 476 | } 477 | 478 | imagesetpixel($contents, $x, $y, $p); 479 | } 480 | } 481 | 482 | return $contents; 483 | } 484 | 485 | protected function interpolate($x, $y, $nw, $ne, $sw, $se) 486 | { 487 | list($r0, $g0, $b0) = $this->getRGB($nw); 488 | list($r1, $g1, $b1) = $this->getRGB($ne); 489 | list($r2, $g2, $b2) = $this->getRGB($sw); 490 | list($r3, $g3, $b3) = $this->getRGB($se); 491 | 492 | $cx = 1.0 - $x; 493 | $cy = 1.0 - $y; 494 | 495 | $m0 = $cx * $r0 + $x * $r1; 496 | $m1 = $cx * $r2 + $x * $r3; 497 | $r = (int)($cy * $m0 + $y * $m1); 498 | 499 | $m0 = $cx * $g0 + $x * $g1; 500 | $m1 = $cx * $g2 + $x * $g3; 501 | $g = (int)($cy * $m0 + $y * $m1); 502 | 503 | $m0 = $cx * $b0 + $x * $b1; 504 | $m1 = $cx * $b2 + $x * $b3; 505 | $b = (int)($cy * $m0 + $y * $m1); 506 | 507 | return ($r << 16) | ($g << 8) | $b; 508 | } 509 | 510 | protected function getCol($image, $x, $y, $background) 511 | { 512 | $L = imagesx($image); 513 | $H = imagesy($image); 514 | if ($x < 0 || $x >= $L || $y < 0 || $y >= $H) { 515 | return $background; 516 | } 517 | 518 | return imagecolorat($image, $x, $y); 519 | } 520 | 521 | /** 522 | * @param $col 523 | * 524 | * @return array 525 | */ 526 | protected function getRGB($col) 527 | { 528 | return [ 529 | (int)($col >> 16) & 0xff, 530 | (int)($col >> 8) & 0xff, 531 | (int)($col) & 0xff, 532 | ]; 533 | } 534 | 535 | protected function postEffectBefore($image) 536 | { 537 | if ($this->rand(0, 100) == 0) { 538 | for ($i = 0; $i < $this->rand(5, 15); ++$i) { 539 | imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR); 540 | } 541 | } 542 | } 543 | 544 | protected function postEffect($image) 545 | { 546 | if (!function_exists('imagefilter')) { 547 | return; 548 | } 549 | 550 | if ($this->backgroundColor != null || $this->textColor != null) { 551 | return; 552 | } 553 | 554 | // Negate ? 555 | if ($this->rand(0, 1) == 5) { 556 | imagefilter($image, IMG_FILTER_NEGATE); 557 | } 558 | 559 | // Edge ? 560 | if ($this->rand(0, 10) == 5) { 561 | imagefilter($image, IMG_FILTER_EDGEDETECT); 562 | } 563 | 564 | // Contrast 565 | imagefilter($image, IMG_FILTER_CONTRAST, $this->rand(-50, 10)); 566 | 567 | // Colorize 568 | if ($this->rand(0, 5) == 5) { 569 | imagefilter($image, IMG_FILTER_COLORIZE, $this->rand(-80, 50), $this->rand(-80, 50), $this->rand(-80, 50)); 570 | } 571 | 572 | } 573 | 574 | protected function drawLine($image, $width, $height, $tcol = null) 575 | { 576 | if ($tcol === null) { 577 | $tcol = imagecolorallocate($image, $this->rand(100, 254), $this->rand(100, 254), $this->rand(100, 254)); 578 | } 579 | 580 | if ($this->rand(0, 1)) { // Horizontal 581 | $Xa = $this->rand(0, $width / 2); 582 | $Ya = $this->rand(0, $height); 583 | $Xb = $this->rand($width / 2, $width); 584 | $Yb = $this->rand(0, $height); 585 | } else { // Vertical 586 | $Xa = $this->rand(0, $width); 587 | $Ya = $this->rand(0, $height / 2); 588 | $Xb = $this->rand(0, $width); 589 | $Yb = $this->rand($height / 2, $height); 590 | } 591 | imagesetthickness($image, $this->rand(1, 3)); 592 | imageline($image, $Xa, $Ya, $Xb, $Yb, $tcol); 593 | } 594 | 595 | protected function calculateTextBox($fontSize, $fontFile, $text, $fontAngle) 596 | { 597 | /************ 598 | * simple function that calculates the *exact* bounding box (single pixel precision). 599 | * The function returns an associative array with these keys: 600 | * left, top: coordinates you will pass to imagettftext 601 | * width, height: dimension of the image you have to create 602 | *************/ 603 | $rect = imagettfbbox($fontSize, $fontAngle, $fontFile, $text); 604 | $minX = min([$rect[0], $rect[2], $rect[4], $rect[6]]); 605 | $maxX = max([$rect[0], $rect[2], $rect[4], $rect[6]]); 606 | $minY = min([$rect[1], $rect[3], $rect[5], $rect[7]]); 607 | $maxY = max([$rect[1], $rect[3], $rect[5], $rect[7]]); 608 | 609 | return [ 610 | "left" => abs($minX) - 1, 611 | "top" => abs($minY) - 1, 612 | "width" => $maxX - $minX, 613 | "height" => $maxY - $minY, 614 | "box" => $rect, 615 | ]; 616 | } 617 | 618 | protected function fontSize($fontFile, $text) 619 | { 620 | $first_size = $this->width / $this->length - $this->rand(1, 4); 621 | 622 | if ($first_size > $this->height) { 623 | $first_size = $this->rand($this->height / 2, $this->height); 624 | } 625 | 626 | $first_box = $this->calculateTextBox($first_size, $fontFile, $text, 0); 627 | 628 | $rate = 1; 629 | 630 | if (($first_box['width'] - 10) > $this->width) { 631 | $rate = ($this->width - $first_size) / $first_box['width']; 632 | $first_size = $rate * $first_size; 633 | } 634 | 635 | if (($first_box['height'] - 5) > $this->height) { 636 | $rate = ($this->height - 5) / $first_box['height']; 637 | $first_size = $rate * $first_size; 638 | } 639 | 640 | $data = ['size' => $first_size, 'rate' => $rate]; 641 | 642 | 643 | return $data; 644 | } 645 | 646 | protected function getImageColor($image) 647 | { 648 | $r = 0; 649 | $g = 0; 650 | $b = 0; 651 | $total = 0; 652 | for ($x = 0; $x < imagesx($image); $x++) { 653 | for ($y = 0; $y < imagesy($image); $y++) { 654 | $rgb = imagecolorat($image, $x, $y); 655 | $_r = ($rgb >> 16) & 0xFF; 656 | $_g = ($rgb >> 8) & 0xFF; 657 | $_b = $rgb & 0xFF; 658 | $r += $_r; 659 | $g += $_g; 660 | $b += $_b; 661 | 662 | 663 | $total++; 664 | } 665 | } 666 | $r_av = round($r / $total); 667 | $g_av = round($g / $total); 668 | $b_av = round($b / $total); 669 | 670 | return [ 671 | 'r' => $r_av, 672 | 'g' => $g_av, 673 | 'b' => $b_av, 674 | ]; 675 | } 676 | 677 | protected function buildColor($background_rgb_colors) 678 | { 679 | $r = $background_rgb_colors['r']; 680 | $g = $background_rgb_colors['g']; 681 | $b = $background_rgb_colors['b']; 682 | 683 | 684 | $color = [ 685 | $this->rand(($r > 127 ? 0 : 128), ($r > 127 ? 128 : 254)), 686 | $this->rand(($g > 127 ? 0 : 128), ($r > 127 ? 128 : 254)), 687 | $this->rand(($b > 127 ? 0 : 128), ($r > 127 ? 128 : 254)), 688 | ]; 689 | 690 | return $color; 691 | } 692 | 693 | protected function writePhrase($image, $phrase, $font) 694 | { 695 | $length = strlen($phrase); 696 | if ($length === 0) { 697 | return \imagecolorallocate($image, 0, 0, 0); 698 | } 699 | 700 | $font_info = $this->fontSize($font, $phrase); 701 | $size = $font_info['size']; 702 | 703 | $box = $this->calculateTextBox($size, $font, $phrase, 0); 704 | $x = $box['left']; 705 | $y = $box['top'] + ($this->height - $box['top']) / 2; 706 | 707 | $bk_rgb = $this->getImageColor($image); 708 | 709 | $font_name = basename($font, ".ttf"); 710 | 711 | //不支持数字,若有数字,则改掉 712 | if (preg_match('/^\+(\_)?(\_)?font_\d+/', $font_name)) { 713 | for ($i = 0; $i < mb_strlen($phrase); ++$i) { 714 | if (is_numeric($phrase[ $i ])) { 715 | $phrase[ $i ] = $this->charset[ $this->rand(0, 51) ]; 716 | } 717 | } 718 | } 719 | 720 | //不支持小写 721 | if (preg_match('/^(\+)?\_font_\d+/', $font_name)) { 722 | $phrase = strtoupper($phrase); 723 | } 724 | //不支持大写 725 | if (preg_match('/^(\+)?\_\_font_\d+/', $font_name)) { 726 | $phrase = strtolower($phrase); 727 | } 728 | 729 | for ($i = 0; $i < $length; $i++) { 730 | if (!count($this->text_color)) { 731 | $textColor = $this->buildColor($bk_rgb); 732 | } else { 733 | $textColor = $this->text_color; 734 | } 735 | $col = \imagecolorallocate($image, $textColor[0], $textColor[1], $textColor[2]); 736 | 737 | $angle = $this->rand(-$this->max_angle, $this->max_angle); 738 | $offset = $this->rand(-$this->max_offset, $this->max_offset); 739 | $_y = $y; 740 | $_x = $x + 10; 741 | if ($i != 0) { 742 | $_y = $_y + $offset; 743 | $_x = $_x + $offset; 744 | } 745 | 746 | $box = \imagettfbbox($size, $angle, $font, $phrase[ $i ]); 747 | $minY = min([$box[1], $box[3], $box[5], $box[7]]); 748 | $maxY = max([$box[1], $box[3], $box[5], $box[7]]); 749 | $xw = $box[2] - $box[0]; 750 | $xh = $maxY - $minY; 751 | 752 | $re = \imagettftext($image, $size, $angle, $_x, $_y, $col, $font, $phrase[ $i ]); 753 | $w = $size / $font_info['rate']; 754 | 755 | $this->coordinate[] = [ 756 | 'word' => $phrase[ $i ], 757 | 'x' => $re[0], 758 | 'y' => $re[1], 759 | 'angle' => $angle, 760 | 'width' => $xw, 761 | 'height' => abs($xh), 762 | 'font_size' => $size, 763 | 'font_name' => $font_name, 764 | ]; 765 | 766 | $x += $w; 767 | 768 | } 769 | 770 | $this->color = $col; 771 | 772 | return $col; 773 | } 774 | } 775 | -------------------------------------------------------------------------------- /application/Command/CaptchaGeneratorCommand.php: -------------------------------------------------------------------------------- 1 | setName('command:captcha-generator')//这里的command:name即是调用名称,如改成make:controller,是调用方式将变为php app make:controller 20 | ->setDescription('生成图片') 21 | ->setDefinition([ 22 | new InputArgument('save-path', InputArgument::OPTIONAL, '生成的图片保存目录', './data'), 23 | new InputArgument('bath-size', InputArgument::OPTIONAL, '每个字体生成多少张图片', 100), 24 | new InputArgument('font-number', InputArgument::OPTIONAL, '第n个字体文件', 0), 25 | new InputArgument('font-end', InputArgument::OPTIONAL, '第n个字体文件结束', 0), 26 | new InputArgument('img-width', InputArgument::OPTIONAL, '图片宽度', 300), 27 | new InputArgument('img-height', InputArgument::OPTIONAL, '图片宽度', 150), 28 | ])->setHelp('没得啥子可帮助的'); 29 | } 30 | 31 | 32 | protected function execute(InputInterface $input, OutputInterface $output) 33 | { 34 | $save_path = $input->getArgument('save-path'); 35 | $bath_size = $input->getArgument('bath-size'); 36 | $font_number = $input->getArgument('font-number'); 37 | $font_end = $input->getArgument('font-end'); 38 | $img_width = $input->getArgument('img-width'); 39 | $img_height = $input->getArgument('img-height'); 40 | 41 | $this->widget = $this->buildWidgetLengthNumber(); 42 | $this->max_widget = count($this->widget) - 1; 43 | 44 | $n = 1; 45 | $builder = new Captcha(); 46 | 47 | $font_count = $font_end ? $font_end : count($builder->getFonts()); 48 | 49 | $processBar = (new SymfonyStyle($input, $output))->createProgressBar(($font_count * $bath_size)); 50 | 51 | for ($i = $font_number; $i < $font_count; $i++) { 52 | 53 | $font = $builder->getFonts()[ $i ]; 54 | 55 | for ($k = 0; $k < $bath_size; $k++) { 56 | $sub_path = date('Ymd/H/i'); 57 | 58 | $length = $this->widget[ mt_rand(0, $this->max_widget) ]; 59 | 60 | $builder->build($img_width, $img_height, $font, $length); 61 | 62 | $data = $builder->getCoordinate(); 63 | $font_name = $data[0]['font_name']; 64 | 65 | $data = array_map(function ($word) { 66 | return $word['word'] . '_' . $word['x'] . '#' . $word['y'] . '_' . $word['angle'] . '_' . $word['width'] . '_' . $word['height']; 67 | }, $data); 68 | 69 | $file_name = $sub_path . '/' . implode('.', [$n, $i, $k]) . '.' . implode('~', $data); 70 | $file_name = $save_path . '/' . $file_name . '@' . $font_name . '.jpg'; 71 | 72 | $builder->save($file_name, 90); 73 | 74 | if ($n % 10 == 1) { 75 | $output->writeln(" 已生成:{$n}张,当前使用第" . $i . "个字体文件"); 76 | } 77 | 78 | ++$n; 79 | 80 | $processBar->advance(); 81 | } 82 | } 83 | 84 | } 85 | 86 | /** 87 | * 权重配置 88 | */ 89 | protected function buildWidgetLengthNumber() 90 | { 91 | $data = [ 92 | 1 => 1, 93 | 2 => 1, 94 | 3 => 5, 95 | 4 => 60, 96 | 5 => 18, 97 | 6 => 10, 98 | 7 => 3, 99 | 8 => 1, 100 | 9 => 1, 101 | ]; 102 | 103 | $arr = []; 104 | 105 | foreach ($data as $k => $v) { 106 | for ($n = 0; $n < $v; $n++) { 107 | $arr[] = $k; 108 | } 109 | } 110 | 111 | 112 | return $arr; 113 | } 114 | 115 | protected function getTotalMillisecond() 116 | { 117 | $time = explode(" ", microtime()); 118 | $time = $time [1] . ($time [0] * 1000); 119 | $time2 = explode(".", $time); 120 | $time = $time2 [0]; 121 | 122 | $time_second = substr($time, 0, 10); 123 | $time_micro = substr($time, 10); 124 | 125 | return [ 126 | 'time_second' => $time_second, 127 | 'time_micro' => $time_micro, 128 | ]; 129 | } 130 | } -------------------------------------------------------------------------------- /application/Command/DefaultCommand.php: -------------------------------------------------------------------------------- 1 | setName('command:name') //这里的command:name即是调用名称,如改成make:controller,是调用方式将变为php app make:controller 15 | ->setDescription('一个测试命令') 16 | ->setDefinition( 17 | [ 18 | new InputArgument('username', InputArgument::REQUIRED, '请输入用户名'), 19 | ] 20 | )->setHelp('帮助信息'); 21 | } 22 | 23 | 24 | protected function execute(InputInterface $input, OutputInterface $output) 25 | { 26 | $username = $input->getArgument('username'); 27 | 28 | $output->writeln("Hello: {$username}"); 29 | } 30 | } -------------------------------------------------------------------------------- /application/Command/FormatFontCommand.php: -------------------------------------------------------------------------------- 1 | setName('command:captcha-format-font')//这里的command:name即是调用名称,如改成make:controller,是调用方式将变为php app make:controller 21 | ->setDescription('格式化字体文件名,删除无效字体'); 22 | } 23 | 24 | protected function execute(InputInterface $input, OutputInterface $output) 25 | { 26 | $this->files = new Filesystem(); 27 | 28 | $this->fonts = $this->files->files(__DIR__ . '/../Assets/fonts'); 29 | 30 | $tmp_arr = []; 31 | foreach ($this->fonts as $font) { 32 | if (preg_match('/font_\d+/', $font->getFilename(), $matches)) { 33 | $tmp_arr[ $matches[0] ] = $font; 34 | } 35 | } 36 | $this->fonts = $tmp_arr; 37 | unset($tmp_arr); 38 | // return; 39 | 40 | dump('准备数据中……'); 41 | $fonts = $this->getFonts(); 42 | 43 | foreach ($fonts as $reset_font) { 44 | preg_match('/font_\d+/', $reset_font, $matches); 45 | if (!$matches) { 46 | dump("--- not allow the {$reset_font} font name"); 47 | continue; 48 | } 49 | $font_name = $matches[0]; 50 | 51 | if (!array_key_exists($font_name, $this->fonts)) { 52 | dump("the {$font_name} font file not exist"); 53 | continue; 54 | } 55 | 56 | $font = $this->fonts[ $font_name ]; 57 | 58 | 59 | //判断无效 60 | if ($reset_font[0] == '-' || preg_match('/^font_\d+$/', $reset_font)) { 61 | if (unlink($font->getRealPath())) { 62 | dump("success deleted font file: {$font_name}"); 63 | } else { 64 | dump("failed delete font file: {$font_name}"); 65 | } 66 | continue; 67 | } 68 | 69 | //改名 70 | if (preg_match('/(^\_(\_)?font_\d+$)|(^\+\_(\_)?font_\d+$)|(^\+font_\d+$)/', $reset_font)) { 71 | $font_pathname = $font->getRealPath(); 72 | $new_filepath = dirname($font_pathname) . '/' . $reset_font . '.ttf'; 73 | 74 | $status = rename($font_pathname, $new_filepath); 75 | 76 | if ($status) { 77 | dump("success reset font name: {$font_name}"); 78 | } else { 79 | dump("failed reset font name: {$font_name}"); 80 | } 81 | 82 | continue; 83 | } 84 | } 85 | 86 | 87 | 88 | } 89 | 90 | 91 | protected function getFonts() 92 | { 93 | $tmp_arr_a = $this->resetFonts(); 94 | $tmp_arr_last = $this->resetFonts2(); 95 | 96 | dump("旧修改:" . count($tmp_arr_a) . ',新修改:' . count($tmp_arr_last)); 97 | for($i=0;$i < count($tmp_arr_a); ++$i) { 98 | if (preg_match('/font_\d+/', $tmp_arr_a[$i], $matches_a)) { 99 | $font_a = $matches_a[0]; 100 | 101 | foreach ($tmp_arr_last as $item) 102 | { 103 | if (preg_match('/font_\d+/', $item, $matches)) { 104 | $font = $matches[0]; 105 | 106 | if($font == $font_a) { 107 | unset($tmp_arr_a[$i]); 108 | } 109 | } 110 | 111 | } 112 | 113 | } else{ 114 | unset($tmp_arr_a[$i]); 115 | } 116 | } 117 | dump("旧修改:" . count($tmp_arr_a) . ',新修改:' . count($tmp_arr_last)); 118 | return array_merge($tmp_arr_a, $tmp_arr_last); 119 | } 120 | 121 | protected function resetFonts() 122 | { 123 | return []; 124 | // return [ 125 | // 'font_111', 126 | // 'font_19', 127 | // '__font_180', 128 | // 'font_450', 129 | // '_font_641', 130 | // '_font_642', 131 | // 'font_1138', 132 | // 'font_1169', 133 | // 'font_1173', 134 | // '_font_1228', 135 | // '_font_1252', 136 | // '_font_1266', 137 | // 'font_1323', 138 | // '_font_1329', 139 | // '_font_1353', 140 | // 'font_1367', 141 | // '_font_1438', 142 | // '_font_1470', 143 | // '_font_1472', 144 | // '_font_1475', 145 | // '_font_1482', 146 | // 'font_1512', 147 | // '_font_1516', 148 | // 'font_1519', 149 | // '_font_1553', 150 | // '__font_1618', 151 | // 'font_1644', 152 | // 'font_1654', 153 | // '_font_1679', 154 | // 'font_1713', 155 | // '_font_1723', 156 | // 'font_1734', 157 | // 'font_1798', 158 | // 'font_1830', 159 | // '_font_1838', 160 | // 'font_1839', 161 | // '_font_1864', 162 | // 'font_1890', 163 | // '_font_2106', 164 | // 'font_2258', 165 | // '_font_5902', 166 | // 'font_5918', 167 | // 'font_8461', 168 | // 'font_8462', 169 | // 'font_8463', 170 | // 'font_8464', 171 | // 'font_8465', 172 | // '_font_9384', 173 | // '_font_9391', 174 | // '_font_9393', 175 | // '_font_9492', 176 | // 'font_9761', 177 | // '_font_10323', 178 | // 'font_10341', 179 | // '_font_10347', 180 | // 'font_10380', 181 | // '_font_10460', 182 | // '_font_10484', 183 | // '__font_10491', 184 | // 'font_10508', 185 | // '_font_10543', 186 | // '_font_10612', 187 | // 'font_10615', 188 | // '_font_10620', 189 | // '__font_10733', 190 | // '_font_10802', 191 | // '_font_10814', 192 | // '_font_10833', 193 | // '_font_10848', 194 | // '_font_10897', 195 | // '_font_10899', 196 | // '_font_10925', 197 | // '_font_10937', 198 | // '_font_10942', 199 | // '__font_10950', 200 | // 'font_10958', 201 | // 'font_11013', 202 | // '_font_11030', 203 | // '_font_11038', 204 | // '_font_11088', 205 | // '_font_11180', 206 | // '_font_11233', 207 | // 'font_11391', 208 | // '__font_11423', 209 | // '_font_11445', 210 | // 'font_11473', 211 | // '_font_11477', 212 | // '__font_11508', 213 | // 'font_11543', 214 | // 'font_11551', 215 | // '__font_11564', 216 | // '__font_11570', 217 | // 'font_11665', 218 | // 'font_11669', 219 | // '_font_11671', 220 | // '_font_11679', 221 | // '_font_11685', 222 | // '_font_11717', 223 | // 'font_11733', 224 | // '_font_11741', 225 | // '_font_11749', 226 | // '_font_11852', 227 | // 'font_12277', 228 | // '_font_12284', 229 | // 'font_12285', 230 | // '_font_12380', 231 | // '_font_12381', 232 | // '__font_12429', 233 | // '_font_12454', 234 | // 'font_12573', 235 | // '_font_12578', 236 | // 'font_12584', 237 | // '_font_12602', 238 | // '_font_12645', 239 | // 'font_12647', 240 | // '_font_12708', 241 | // '_font_12767', 242 | // 'font_12780', 243 | // '_font_12827', 244 | // '_font_12856', 245 | // '_font_13052', 246 | // '_font_13085', 247 | // '__font_13131', 248 | // '_font_13324', 249 | // '_font_13173', 250 | // 'font_13235', 251 | // '__font_13264', 252 | // '_font_13321', 253 | // '_font_13345', 254 | // '_font_13347', 255 | // '__font_13349', 256 | // '_font_13377', 257 | // '_font_13392', 258 | // '__font_13404', 259 | // 'font_13420', 260 | // 'font_13422', 261 | // '_font_13430', 262 | // '__font_13475', 263 | // 'font_13508', 264 | // '_font_13523', 265 | // '_font_13586', 266 | // 'font_13597', 267 | // '_font_13718', 268 | // '_font_13862', 269 | // '__font_13985', 270 | // '_font_13997', 271 | // '_font_14018', 272 | // 'font_14029', 273 | // '_font_14063', 274 | // '_font_14074', 275 | // '_font_14115', 276 | // '_font_14145', 277 | // '_font_14242', 278 | // '_font_14264', 279 | // '_font_14268', 280 | // '_font_14296', 281 | // '_font_14304', 282 | // '__font_14328', 283 | // '_font_14332', 284 | // '_font_14337', 285 | // '_font_14340', 286 | // '_font_14341', 287 | // '_font_14342', 288 | // '_font_14354', 289 | // '_font_14360', 290 | // 'font_14387', 291 | // '_font_14424', 292 | // '_font_14441', 293 | // 'font_14718', 294 | // '_font_14750', 295 | // 'font_14767', 296 | // '_font_14797', 297 | // 'font_14821', 298 | // 'font_14864', 299 | // '_font_14892', 300 | // '_font_14899', 301 | // '_font_14912', 302 | // '__font_14913', 303 | // '__font_14927', 304 | // '_font_14957', 305 | // 'font_14963', 306 | // 'font_14993', 307 | // '_font_14996', 308 | // '_font_14999', 309 | // '_font_15065', 310 | // '_font_15083', 311 | // 'font_15090', 312 | // 'font_15111', 313 | // '__font_15164', 314 | // 'font_15176', 315 | // 'font_15504', 316 | // 'font_15539', 317 | // '_font_15550', 318 | // '_font_15561', 319 | // '_font_15578', 320 | // '_font_15662', 321 | // '_font_15680', 322 | // '_font_15715', 323 | // 'font_15734', 324 | // '_font_15766', 325 | // '_font_15768', 326 | // '_font_15853', 327 | // 'font_15897', 328 | // 'font_15986', 329 | // 'font_16073', 330 | // '_font_16125', 331 | // '_font_16128', 332 | // '_font_16134', 333 | // 'font_16270', 334 | // 'font_16346', 335 | // 'font_16500', 336 | // '_font_16507', 337 | // '__font_16509', 338 | // '_font_16528', 339 | // 'font_16550', 340 | // '_font_16603', 341 | // '__font_16620', 342 | // '_font_16622', 343 | // '_font_16630', 344 | // 'font_16635', 345 | // '_font_16653', 346 | // 'font_16657', 347 | // '_font_16707', 348 | // '_font_16764', 349 | // '_font_16765', 350 | // 'font_16821', 351 | // '__font_16853', 352 | // 'font_16912', 353 | // 'font_16921', 354 | // '_font_16946', 355 | // 'font_16952', 356 | // '_font_16979', 357 | // 'font_17033', 358 | // '_font_17046', 359 | // '__font_17047', 360 | // '_font_17072', 361 | // '_font_17078', 362 | // 'font_17096', 363 | // '__font_17150', 364 | // '_font_17186', 365 | // '__font_17203', 366 | // '_font_17208', 367 | // '_font_17212', 368 | // 'font_17300', 369 | // 'font_17307', 370 | // 'font_17379', 371 | // 'font_17381', 372 | // '_font_17391', 373 | // 'font_17418', 374 | // 'font_17464', 375 | // '_font_17586', 376 | // '__font_17599', 377 | // '_font_17643', 378 | // 'font_17647', 379 | // 'font_17688', 380 | // 'font_17700', 381 | // '_font_17708', 382 | // 'font_17792', 383 | // '__font_17832', 384 | // 'font_17850', 385 | // '_font_17896', 386 | // '__font_17917', 387 | // '_font_17954', 388 | // 'font_18110', 389 | // 'font_18121', 390 | // '_font_18129', 391 | // '_font_18163', 392 | // 'font_18175', 393 | // '__font_18231', 394 | // 'font_18234', 395 | // 'font_18238', 396 | // 'font_18260', 397 | // '_font_18267', 398 | // 'font_18284', 399 | // '_font_18396', 400 | // '_font_18415', 401 | // '_font_18419', 402 | // 'font_18427', 403 | // '_font_18425', 404 | // '_font_18452', 405 | // 'font_18457', 406 | // '_font_18491', 407 | // '_font_18531', 408 | // '_font_18591', 409 | // '_font_18611', 410 | // '_font_18624', 411 | // '_font_18638', 412 | // '_font_18641', 413 | // '_font_18647', 414 | // 'font_18739', 415 | // 'font_18808', 416 | // '_font_18829', 417 | // '_font_18878', 418 | // '_font_18880', 419 | // 'font_18884', 420 | // '__font_18887', 421 | // '_font_18888', 422 | // '__font_18900', 423 | // 'font_18943', 424 | // 'font_18966', 425 | // 'font_18976', 426 | // 'font_18981', 427 | // 'font_19030', 428 | // 429 | // 430 | // 'font_242', 431 | // 'font_251', 432 | // 'font_632', 433 | // '_font_1226', 434 | // '_font_1251', 435 | // '_font_2070', 436 | // '_font_2072', 437 | // '_font_2076', 438 | // '_font_2119', 439 | // 'font_2174', 440 | // 'font_2202', 441 | // 'font_2206', 442 | // '_font_2223', 443 | // '_font_2274', 444 | // '_font_2284', 445 | // '_font_2316', 446 | // '_font_2331', 447 | // '_font_2337', 448 | // '__font_2350', 449 | // '_font_2411', 450 | // '_font_2436', 451 | // 'font_2545', 452 | // '_font_2546', 453 | // 'font_2565', 454 | // '_font_2578', 455 | // 'font_2642', 456 | // '_font_2666', 457 | // 'font_2667', 458 | // '_font_2683', 459 | // 'font_2702', 460 | // 'font_2757', 461 | // '_font_2768', 462 | // '_font_2773', 463 | // '_font_2784', 464 | // 'font_2818', 465 | // 'font_2834', 466 | // '_font_2844', 467 | // 'font_2849', 468 | // '_font_2854', 469 | // '_font_2889', 470 | // 'font_2900', 471 | // '__font_2921', 472 | // '_font_2938', 473 | // 'font_2945', 474 | // '_font_2961', 475 | // 'font_3030', 476 | // '_font_3039', 477 | // 'font_3041', 478 | // '__font_3086', 479 | // 'font_3090', 480 | // '_font_3105', 481 | // 'font_3169', 482 | // 'font_3175', 483 | // '_font_3191', 484 | // 'font_3195', 485 | // '__font_3249', 486 | // '_font_3266', 487 | // 'font_3280', 488 | // '_font_3307', 489 | // '__font_3419', 490 | // '__font_3439', 491 | // '__font_3442', 492 | // '__font_3445', 493 | // '__font_3450', 494 | // '__font_3453', 495 | // '_font_3468', 496 | // 'font_3523', 497 | // '__font_3528', 498 | // '_font_3532', 499 | // '_font_3552', 500 | // '_font_3555', 501 | // '_font_3616', 502 | // 'font_3680', 503 | // '_font_3742', 504 | // 'font_3775', 505 | // '__font_3865', 506 | // 'font_3895', 507 | // 'font_3917', 508 | // '__font_3982', 509 | // '__font_3993', 510 | // '__font_3996', 511 | // '__font_4006', 512 | // '__font_4009', 513 | // '__font_4012', 514 | // '__font_4015', 515 | // '__font_4020', 516 | // '__font_4032', 517 | // 'font_4035', 518 | // '__font_4040', 519 | // '__font_4049', 520 | // '__font_4057', 521 | // '__font_4060', 522 | // 'font_4063', 523 | // 'font_4072', 524 | // 'font_4084', 525 | // '_font_4390', 526 | // '__font_4443', 527 | // 'font_4613', 528 | // '__font_4823', 529 | // '__font_4840', 530 | // '_font_4860', 531 | // 'font_4929', 532 | // '_font_5139', 533 | // '__font_5157', 534 | // 'font_5325', 535 | // '_font_5338', 536 | // 'font_5389', 537 | // '__font_5446', 538 | // '__font_5447', 539 | // '__font_5460', 540 | // '_font_5463', 541 | // '__font_5483', 542 | // 'font_5525', 543 | // 'font_5539', 544 | // 'font_5577', 545 | // 'font_5693', 546 | // 'font_5762', 547 | // '__font_5976', 548 | // '_font_6000', 549 | // 'font_6091', 550 | // 'font_6256', 551 | // 'font_6667', 552 | // 'font_6690', 553 | // 'font_6691', 554 | // 'font_6700', 555 | // 'font_6716', 556 | // 'font_6717', 557 | // 'font_6718', 558 | // 'font_6719', 559 | // 'font_6721', 560 | // 'font_6732', 561 | // 'font_6733', 562 | // 'font_6734', 563 | // 'font_6755', 564 | // 'font_6776', 565 | // 'font_6777', 566 | // 'font_6778', 567 | // 'font_6779', 568 | // 'font_6781', 569 | // 'font_6783', 570 | // 'font_6784', 571 | // 'font_6785', 572 | // 'font_6786', 573 | // 'font_6795', 574 | // 'font_6796', 575 | // 'font_6797', 576 | // 'font_6798', 577 | // 'font_6800', 578 | // 'font_6801', 579 | // 'font_6803', 580 | // 'font_6804', 581 | // 'font_6809', 582 | // 'font_6810', 583 | // 'font_6811', 584 | // 'font_6812', 585 | // 'font_6817', 586 | // 'font_6822', 587 | // 'font_6825', 588 | // 'font_6826', 589 | // 'font_6827', 590 | // 'font_6828', 591 | // 'font_6829', 592 | // 'font_6830', 593 | // 'font_6831', 594 | // 'font_6832', 595 | // 'font_6867', 596 | // 'font_6868', 597 | // 'font_6869', 598 | // 'font_6871', 599 | // 'font_6872', 600 | // 'font_6873', 601 | // 'font_6874', 602 | // 'font_6875', 603 | // 'font_6876', 604 | // 'font_6877', 605 | // 'font_6878', 606 | // 'font_6879', 607 | // 'font_6881', 608 | // 'font_6882', 609 | // 'font_6884', 610 | // 'font_6885', 611 | // 'font_6888', 612 | // 'font_6890', 613 | // 'font_6891', 614 | // 'font_6892', 615 | // 'font_6893', 616 | // 'font_6894', 617 | // 'font_6895', 618 | // 'font_6896', 619 | // 'font_6897', 620 | // 'font_6898', 621 | // 'font_6899', 622 | // 'font_6900', 623 | // 'font_6901', 624 | // 'font_6902', 625 | // 'font_6930', 626 | // 'font_6905', 627 | // 'font_6906', 628 | // 'font_6907', 629 | // 'font_6911', 630 | // 'font_6912', 631 | // 'font_6913', 632 | // 'font_6914', 633 | // 'font_6915', 634 | // 'font_6916', 635 | // 'font_6917', 636 | // 'font_6919', 637 | // 'font_6920', 638 | // 'font_6922', 639 | // 'font_6923', 640 | // 'font_6924', 641 | // 'font_6930', 642 | // 'font_6931', 643 | // 'font_6932', 644 | // 'font_6933', 645 | // 'font_6934', 646 | // 'font_6935', 647 | // 'font_6936', 648 | // 'font_6937', 649 | // 'font_6939', 650 | // 'font_6940', 651 | // 'font_6941', 652 | // 'font_6942', 653 | // 'font_6943', 654 | // 'font_6944', 655 | // 'font_6945', 656 | // 'font_6946', 657 | // 'font_6947', 658 | // 'font_6948', 659 | // 'font_6949', 660 | // 'font_6950', 661 | // 'font_6951', 662 | // 'font_6952', 663 | // 'font_6953', 664 | // 'font_6954', 665 | // 'font_6955', 666 | // 'font_6957', 667 | // 'font_6958', 668 | // 'font_6959', 669 | // 'font_6960', 670 | // 'font_6961', 671 | // 'font_6962', 672 | // 'font_6963', 673 | // 'font_6964', 674 | // 'font_6965', 675 | // 'font_6966', 676 | // 'font_6967', 677 | // 'font_6968', 678 | // 'font_6969', 679 | // 'font_6975', 680 | // 'font_6976', 681 | // 'font_6978', 682 | // 'font_6979', 683 | // 'font_6980', 684 | // 'font_6981', 685 | // 'font_6983', 686 | // 'font_6984', 687 | // 'font_6985', 688 | // 'font_6986', 689 | // 'font_6987', 690 | // 'font_6988', 691 | // 'font_6989', 692 | // 'font_6991', 693 | // 'font_6992', 694 | // 'font_6994', 695 | // 'font_6995', 696 | // 'font_6996', 697 | // 'font_6997', 698 | // 'font_7003', 699 | // 'font_7004', 700 | // 'font_7005', 701 | // 'font_7006', 702 | // 'font_7008', 703 | // 'font_7009', 704 | // 'font_7010', 705 | // 'font_7011', 706 | // 'font_7013', 707 | // 'font_7014', 708 | // 'font_7015', 709 | // 'font_7016', 710 | // 'font_7018', 711 | // 'font_7019', 712 | // 'font_7620', 713 | // 'font_7021', 714 | // 'font_7022', 715 | // 'font_7023', 716 | // 'font_7024', 717 | // 'font_7025', 718 | // 'font_7026', 719 | // 'font_7027', 720 | // 'font_7028', 721 | // 'font_7029', 722 | // 'font_7030', 723 | // 'font_7031', 724 | // 'font_7032', 725 | // 'font_7033', 726 | // 'font_7034', 727 | // 'font_7035', 728 | // 'font_7036', 729 | // 'font_7037', 730 | // 'font_7039', 731 | // 'font_7045', 732 | // 'font_7047', 733 | // 'font_7048', 734 | // 'font_7049', 735 | // 'font_7050', 736 | // 'font_7051', 737 | // 'font_7053', 738 | // 'font_7054', 739 | // 'font_7055', 740 | // 'font_7058', 741 | // 'font_7059', 742 | // 'font_7060', 743 | // 'font_7071', 744 | // 'font_7072', 745 | // 'font_7073', 746 | // 'font_7074', 747 | // 'font_7076', 748 | // 'font_7077', 749 | // 'font_7079', 750 | // 'font_7080', 751 | // 'font_7081', 752 | // 'font_7083', 753 | // 'font_7084', 754 | // 'font_7085', 755 | // 'font_7087', 756 | // 'font_7088', 757 | // 'font_7089', 758 | // 'font_7090', 759 | // 'font_7091', 760 | // 'font_7092', 761 | // 'font_7093', 762 | // 'font_7097', 763 | // 'font_7098', 764 | // 'font_7099', 765 | // 'font_7100', 766 | // 'font_7101', 767 | // 'font_7102', 768 | // 'font_7103', 769 | // 'font_7104', 770 | // 'font_7106', 771 | // 'font_7109', 772 | // 'font_7110', 773 | // 'font_7113', 774 | // 'font_7114', 775 | // 'font_7115', 776 | // 'font_7116', 777 | // 'font_7117', 778 | // 'font_7118', 779 | // 'font_7120', 780 | // 'font_7121', 781 | // 'font_7123', 782 | // 'font_7124', 783 | // 'font_7125', 784 | // 'font_7126', 785 | // 'font_7130', 786 | // 'font_7132', 787 | // 'font_7179', 788 | // 'font_7180', 789 | // 'font_7181', 790 | // 'font_7183', 791 | // 'font_7186', 792 | // 'font_7188', 793 | // 'font_7189', 794 | // 'font_7190', 795 | // 'font_7193', 796 | // 'font_7195', 797 | // 'font_7197', 798 | // 'font_7198', 799 | // 'font_7199', 800 | // 'font_7200', 801 | // 'font_7201', 802 | // 'font_7202', 803 | // 'font_7203', 804 | // 'font_7204', 805 | // 'font_7205', 806 | // 'font_7206', 807 | // 'font_7207', 808 | // 'font_7208', 809 | // 'font_7209', 810 | // 'font_7210', 811 | // 'font_7211', 812 | // 'font_7212', 813 | // 'font_7213', 814 | // 'font_7214', 815 | // 'font_7215', 816 | // 'font_7216', 817 | // 'font_7218', 818 | // 'font_7219', 819 | // 'font_7220', 820 | // 'font_7221', 821 | // 'font_7222', 822 | // 'font_7223', 823 | // 'font_7227', 824 | // 'font_7228', 825 | // 'font_7230', 826 | // 'font_7231', 827 | // 'font_7232', 828 | // 'font_7233', 829 | // 'font_7234', 830 | // 'font_7235', 831 | // 'font_7236', 832 | // 'font_7238', 833 | // 'font_7239', 834 | // 'font_7240', 835 | // 'font_7241', 836 | // 'font_7242', 837 | // 'font_7243', 838 | // 'font_7244', 839 | // 'font_7245', 840 | // 'font_7246', 841 | // 'font_7247', 842 | // 'font_7248', 843 | // 'font_7249', 844 | // 'font_7250', 845 | // 'font_7251', 846 | // 'font_7253', 847 | // 'font_7254', 848 | // 'font_7255', 849 | // 'font_7256', 850 | // 'font_7257', 851 | // 'font_7258', 852 | // 'font_7259', 853 | // 'font_7260', 854 | // 'font_7261', 855 | // 'font_7262', 856 | // 'font_7264', 857 | // 'font_7265', 858 | // 'font_7266', 859 | // 'font_7267', 860 | // 'font_7268', 861 | // 'font_7269', 862 | // 'font_7270', 863 | // 'font_7271', 864 | // 'font_7272', 865 | // 'font_7273', 866 | // 'font_7274', 867 | // 'font_7275', 868 | // 'font_7276', 869 | // 'font_7277', 870 | // 'font_7279', 871 | // 'font_7280', 872 | // 'font_7281', 873 | // 'font_7282', 874 | // 'font_7283', 875 | // 'font_7284', 876 | // 'font_7285', 877 | // 'font_7286', 878 | // 'font_7287', 879 | // 'font_7288', 880 | // 'font_7289', 881 | // 'font_7290', 882 | // 'font_7291', 883 | // 'font_7292', 884 | // 'font_7293', 885 | // 'font_7294', 886 | // 'font_7295', 887 | // 'font_7296', 888 | // 'font_7297', 889 | // 'font_7298', 890 | // 'font_7299', 891 | // 'font_7236', 892 | // 'font_7353', 893 | // 'font_7373', 894 | // 'font_7376', 895 | // 'font_7396', 896 | // 'font_7453', 897 | // 'font_7454', 898 | // 'font_7455', 899 | // 'font_7456', 900 | // 'font_7458', 901 | // 'font_7459', 902 | // 'font_7460', 903 | // 'font_7461', 904 | // 'font_7463', 905 | // 'font_7464', 906 | // 'font_7465', 907 | // 'font_7467', 908 | // 'font_7468', 909 | // 'font_7557', 910 | // 'font_7586', 911 | // 'font_7587', 912 | // 'font_7588', 913 | // 'font_7589', 914 | // 'font_7590', 915 | // 'font_7591', 916 | // 'font_7592', 917 | // 'font_7593', 918 | // 'font_7594', 919 | // 'font_7595', 920 | // 'font_7596', 921 | // 'font_7597', 922 | // 'font_7598', 923 | // 'font_7599', 924 | // 'font_7600', 925 | // 'font_7601', 926 | // 'font_7602', 927 | // 'font_7603', 928 | // 'font_7604', 929 | // 'font_7605', 930 | // 'font_7606', 931 | // 'font_7607', 932 | // 'font_7608', 933 | // 'font_7610', 934 | // 'font_7705', 935 | // 'font_7707', 936 | // 'font_7708', 937 | // 'font_7709', 938 | // 'font_7710', 939 | // 'font_7712', 940 | // 'font_7713', 941 | // 'font_7714', 942 | // 'font_7716', 943 | // 'font_7718', 944 | // 'font_7719', 945 | // 'font_7720', 946 | // 'font_7721', 947 | // 'font_7722', 948 | // 'font_7723', 949 | // 'font_7724', 950 | // 'font_7736', 951 | // 'font_7737', 952 | // 'font_7738', 953 | // 'font_7739', 954 | // 'font_7740', 955 | // 'font_7741', 956 | // 'font_7742', 957 | // 'font_7743', 958 | // 'font_7744', 959 | // 'font_7745', 960 | // 'font_7746', 961 | // 'font_7747', 962 | // 'font_7748', 963 | // 'font_7749', 964 | // 'font_7750', 965 | // 'font_7752', 966 | // 'font_7753', 967 | // 'font_7754', 968 | // 'font_7755', 969 | // 'font_7756', 970 | // 'font_7757', 971 | // 'font_7758', 972 | // 'font_7759', 973 | // 'font_7760', 974 | // 'font_7761', 975 | // 'font_7762', 976 | // 'font_7763', 977 | // 'font_7764', 978 | // 'font_7765', 979 | // 'font_7766', 980 | // 'font_7767', 981 | // 'font_7768', 982 | // 'font_7771', 983 | // 'font_7772', 984 | // 'font_7773', 985 | // 'font_7774', 986 | // 'font_7775', 987 | // 'font_7776', 988 | // 'font_7778', 989 | // 'font_7779', 990 | // 'font_7780', 991 | // 'font_7781', 992 | // 'font_7782', 993 | // 'font_7783', 994 | // 'font_7784', 995 | // 'font_7785', 996 | // 'font_7786', 997 | // 'font_7787', 998 | // 'font_7788', 999 | // 'font_7789', 1000 | // 'font_7790', 1001 | // 'font_7791', 1002 | // 'font_7792', 1003 | // 'font_7793', 1004 | // 'font_7794', 1005 | // 'font_7795', 1006 | // 'font_7796', 1007 | // 'font_7797', 1008 | // 'font_7798', 1009 | // 'font_7799', 1010 | // 'font_7800', 1011 | // 'font_7802', 1012 | // 'font_7804', 1013 | // 'font_7805', 1014 | // 'font_7807', 1015 | // 'font_7808', 1016 | // 'font_7810', 1017 | // 'font_7811', 1018 | // 'font_7812', 1019 | // 'font_7813', 1020 | // 'font_7814', 1021 | // 'font_7815', 1022 | // 'font_7816', 1023 | // 'font_7817', 1024 | // 'font_7820', 1025 | // 'font_7822', 1026 | // 'font_7823', 1027 | // 'font_7824', 1028 | // 'font_7825', 1029 | // 'font_7826', 1030 | // 'font_7827', 1031 | // 'font_7828', 1032 | // 'font_7829', 1033 | // 'font_7838', 1034 | // 'font_7839', 1035 | // 'font_7840', 1036 | // 'font_7841', 1037 | // 'font_7842', 1038 | // 'font_7843', 1039 | // 'font_7844', 1040 | // 'font_7845', 1041 | // 'font_7846', 1042 | // 'font_7847', 1043 | // 'font_7848', 1044 | // 'font_7849', 1045 | // 'font_7850', 1046 | // 'font_7852', 1047 | // 'font_7854', 1048 | // 'font_7855', 1049 | // 'font_7857', 1050 | // 'font_7858', 1051 | // 'font_7859', 1052 | // 'font_7860', 1053 | // 'font_7861', 1054 | // 'font_7862', 1055 | // 'font_7863', 1056 | // 'font_7864', 1057 | // 'font_7866', 1058 | // 'font_7867', 1059 | // 'font_7868', 1060 | // 'font_7869', 1061 | // 'font_7870', 1062 | // 'font_7871', 1063 | // 'font_7872', 1064 | // 'font_7873', 1065 | // 'font_7874', 1066 | // 'font_7875', 1067 | // 'font_7876', 1068 | // 'font_7876', 1069 | // 'font_7877', 1070 | // 'font_7878', 1071 | // 'font_7879', 1072 | // 'font_7880', 1073 | // 'font_7881', 1074 | // 'font_7882', 1075 | // 'font_7883', 1076 | // 'font_7884', 1077 | // 'font_7885', 1078 | // 'font_7886', 1079 | // 'font_7887', 1080 | // 'font_7888', 1081 | // 'font_7889', 1082 | // 'font_7890', 1083 | // 'font_7891', 1084 | // 'font_7892', 1085 | // 'font_7893', 1086 | // 'font_7894', 1087 | // '_font_7918', 1088 | // 'font_7939', 1089 | // 'font_7940', 1090 | // 'font_7941', 1091 | // 'font_7942', 1092 | // 'font_7943', 1093 | // 'font_7944', 1094 | // 'font_7945', 1095 | // 'font_7946', 1096 | // 'font_7947', 1097 | // 'font_7948', 1098 | // 'font_7949', 1099 | // 'font_7950', 1100 | // 'font_7951', 1101 | // 'font_7952', 1102 | // 'font_7953', 1103 | // 'font_7954', 1104 | // 'font_7955', 1105 | // 'font_7956', 1106 | // 'font_7957', 1107 | // 'font_7958', 1108 | // 'font_7959', 1109 | // 'font_7960', 1110 | // 'font_7961', 1111 | // 'font_7962', 1112 | // 'font_7963', 1113 | // 'font_7964', 1114 | // 'font_7965', 1115 | // 'font_7966', 1116 | // 'font_7967', 1117 | // 'font_7968', 1118 | // 'font_7969', 1119 | // 'font_7970', 1120 | // 'font_7971', 1121 | // 'font_7972', 1122 | // 'font_7973', 1123 | // 'font_7974', 1124 | // 'font_7975', 1125 | // 'font_7976', 1126 | // 'font_7977', 1127 | // 'font_7978', 1128 | // 'font_7979', 1129 | // 'font_7980', 1130 | // 'font_7981', 1131 | // 'font_7982', 1132 | // 'font_7983', 1133 | // 'font_7984', 1134 | // 'font_7985', 1135 | // 'font_7986', 1136 | // 'font_7987', 1137 | // 'font_7988', 1138 | // 'font_7989', 1139 | // 'font_7990', 1140 | // '_font_7999', 1141 | // 'font_8005', 1142 | // 'font_8014', 1143 | // 'font_8023', 1144 | // 'font_8044', 1145 | // 'font_8041', 1146 | // 'font_8057', 1147 | // 'font_8058', 1148 | // 'font_8059', 1149 | // 'font_8060', 1150 | // 'font_8061', 1151 | // 'font_8062', 1152 | // 'font_8063', 1153 | // 'font_8064', 1154 | // 'font_8065', 1155 | // 'font_8066', 1156 | // 'font_8067', 1157 | // 'font_8068', 1158 | // 'font_8069', 1159 | // 'font_8070', 1160 | // 'font_8071', 1161 | // 'font_8072', 1162 | // 'font_8073', 1163 | // 'font_8074', 1164 | // 'font_8075', 1165 | // 'font_8076', 1166 | // 'font_8086', 1167 | // 'font_8087', 1168 | // 'font_8089', 1169 | // 'font_8090', 1170 | // 'font_8091', 1171 | // 'font_8092', 1172 | // 'font_8093', 1173 | // 'font_8094', 1174 | // 'font_8095', 1175 | // 'font_8096', 1176 | // 'font_8097', 1177 | // 'font_8098', 1178 | // 'font_8099', 1179 | // 'font_8100', 1180 | // 'font_8101', 1181 | // 'font_8102', 1182 | // 'font_8103', 1183 | // 'font_8104', 1184 | // 'font_8105', 1185 | // 'font_8106', 1186 | // 'font_8107', 1187 | // 'font_8108', 1188 | // 'font_8109', 1189 | // 'font_8110', 1190 | // 'font_8111', 1191 | // 'font_8112', 1192 | // 'font_8113', 1193 | // 'font_8114', 1194 | // 'font_8115', 1195 | // 'font_8116', 1196 | // 'font_8117', 1197 | // 'font_8118', 1198 | // 'font_8119', 1199 | // 'font_8120', 1200 | // 'font_8121', 1201 | // 'font_8122', 1202 | // 'font_8123', 1203 | // 'font_8124', 1204 | // 'font_8125', 1205 | // 'font_8126', 1206 | // 'font_8127', 1207 | // 'font_8128', 1208 | // 'font_8129', 1209 | // 'font_8130', 1210 | // 'font_8131', 1211 | // 'font_8132', 1212 | // 'font_8133', 1213 | // 'font_8134', 1214 | // 'font_8135', 1215 | // 'font_8136', 1216 | // 'font_8137', 1217 | // 'font_8139', 1218 | // 'font_8140', 1219 | // 'font_8141', 1220 | // 'font_8142', 1221 | // 'font_8143', 1222 | // 'font_8144', 1223 | // '_font_8145', 1224 | // 'font_8150', 1225 | // 'font_8151', 1226 | // 'font_8164', 1227 | // 'font_8165', 1228 | // 'font_8168', 1229 | // 'font_8169', 1230 | // 'font_8171', 1231 | // 'font_8172', 1232 | // 'font_8173', 1233 | // 'font_8174', 1234 | // 'font_8175', 1235 | // 'font_8176', 1236 | // 'font_8177', 1237 | // 'font_8178', 1238 | // 'font_8179', 1239 | // 'font_8180', 1240 | // 'font_8181', 1241 | // 'font_8182', 1242 | // 'font_8183', 1243 | // 'font_8184', 1244 | // 'font_8185', 1245 | // 'font_8186', 1246 | // 'font_8187', 1247 | // 'font_8188', 1248 | // 'font_8189', 1249 | // 'font_8190', 1250 | // 'font_8191', 1251 | // 'font_8192', 1252 | // 'font_8193', 1253 | // 'font_8194', 1254 | // 'font_8195', 1255 | // 'font_8196', 1256 | // 'font_8197', 1257 | // 'font_8198', 1258 | // 'font_8199', 1259 | // 'font_8200', 1260 | // 'font_8201', 1261 | // 'font_8202', 1262 | // 'font_8204', 1263 | // 'font_8205', 1264 | // '_font_8210', 1265 | // 'font_8213', 1266 | // 'font_8214', 1267 | // 'font_8215', 1268 | // 'font_8217', 1269 | // 'font_8222', 1270 | // 'font_8224', 1271 | // 'font_8237', 1272 | // 'font_8238', 1273 | // 'font_8239', 1274 | // 'font_8240', 1275 | // 'font_8241', 1276 | // 'font_8242', 1277 | // 'font_8243', 1278 | // 'font_8244', 1279 | // 'font_8247', 1280 | // 'font_8248', 1281 | // 'font_8249', 1282 | // 'font_8250', 1283 | // 'font_8251', 1284 | // 'font_8252', 1285 | // 'font_8253', 1286 | // 'font_8254', 1287 | // 'font_8255', 1288 | // 'font_8256', 1289 | // 'font_8257', 1290 | // 'font_8258', 1291 | // 'font_8259', 1292 | // 'font_8260', 1293 | // 'font_8261', 1294 | // 'font_8262', 1295 | // 'font_8263', 1296 | // 'font_8264', 1297 | // 'font_8265', 1298 | // 'font_8266', 1299 | // 'font_8267', 1300 | // 'font_8268', 1301 | // 'font_8269', 1302 | // 'font_8270', 1303 | // 'font_8271', 1304 | // 'font_8272', 1305 | // 'font_8273', 1306 | // 'font_8274', 1307 | // 'font_8275', 1308 | // 'font_8276', 1309 | // 'font_8277', 1310 | // 'font_8278', 1311 | // 'font_8279', 1312 | // 'font_8280', 1313 | // 'font_8281', 1314 | // 'font_8282', 1315 | // 'font_8283', 1316 | // 'font_8284', 1317 | // 'font_8285', 1318 | // 'font_8286', 1319 | // 'font_8287', 1320 | // 'font_8289', 1321 | // 'font_8305', 1322 | // 'font_8306', 1323 | // 'font_8307', 1324 | // 'font_8308', 1325 | // 'font_8309', 1326 | // 'font_8311', 1327 | // 'font_8312', 1328 | // 'font_8313', 1329 | // 'font_8316', 1330 | // 'font_8333', 1331 | // 'font_8334', 1332 | // 'font_8336', 1333 | // 'font_8337', 1334 | // 'font_8338', 1335 | // 'font_8340', 1336 | // 'font_8341', 1337 | // 'font_8342', 1338 | // 'font_8346', 1339 | // 'font_8347', 1340 | // 'font_8348', 1341 | // 'font_8349', 1342 | // 'font_8350', 1343 | // 'font_8351', 1344 | // 'font_8352', 1345 | // 'font_8353', 1346 | // 'font_8354', 1347 | // 'font_8355', 1348 | // 'font_8356', 1349 | // 'font_8357', 1350 | // 'font_8358', 1351 | // 'font_8360', 1352 | // 'font_8361', 1353 | // 'font_8362', 1354 | // 'font_8363', 1355 | // 'font_8364', 1356 | // 'font_8365', 1357 | // 'font_8367', 1358 | // 'font_8368', 1359 | // 'font_8369', 1360 | // 'font_8371', 1361 | // 'font_8372', 1362 | // 'font_8373', 1363 | // 'font_8374', 1364 | // 'font_8375', 1365 | // 'font_8376', 1366 | // 'font_8379', 1367 | // 'font_8395', 1368 | // 'font_8422', 1369 | // 'font_8423', 1370 | // 'font_8432', 1371 | // 'font_8439', 1372 | // 'font_8448', 1373 | // 'font_8466', 1374 | // 'font_8467', 1375 | // 'font_8468', 1376 | // 'font_8469', 1377 | // 'font_8470', 1378 | // 'font_8471', 1379 | // 'font_8472', 1380 | // 'font_8473', 1381 | // 'font_8475', 1382 | // 'font_8476', 1383 | // 'font_8478', 1384 | // 'font_8479', 1385 | // 'font_8481', 1386 | // 'font_8483', 1387 | // 'font_8484', 1388 | // 'font_8485', 1389 | // 'font_8486', 1390 | // 'font_8488', 1391 | // 'font_8489', 1392 | // 'font_8490', 1393 | // 'font_8491', 1394 | // 'font_8492', 1395 | // 'font_8493', 1396 | // 'font_8494', 1397 | // 'font_8495', 1398 | // 'font_8497', 1399 | // 'font_8498', 1400 | // 'font_8499', 1401 | // 'font_8500', 1402 | // 'font_8501', 1403 | // 'font_8502', 1404 | // 'font_8503', 1405 | // 'font_8504', 1406 | // 'font_8505', 1407 | // 'font_8506', 1408 | // 'font_8507', 1409 | // 'font_8510', 1410 | // 'font_8511', 1411 | // 'font_8513', 1412 | // 'font_8514', 1413 | // 'font_8516', 1414 | // 'font_8517', 1415 | // 'font_8519', 1416 | // 'font_8521', 1417 | // 'font_8522', 1418 | // 'font_8523', 1419 | // 'font_8528', 1420 | // 'font_8529', 1421 | // 'font_8530', 1422 | // 'font_8531', 1423 | // 'font_8533', 1424 | // 'font_8534', 1425 | // 'font_8535', 1426 | // 'font_8536', 1427 | // 'font_8537', 1428 | // 'font_8538', 1429 | // 'font_8539', 1430 | // 'font_8540', 1431 | // 'font_8541', 1432 | // 'font_8542', 1433 | // 'font_8543', 1434 | // 'font_8544', 1435 | // 'font_8545', 1436 | // 'font_8546', 1437 | // 'font_8547', 1438 | // 'font_8548', 1439 | // 'font_8550', 1440 | // 'font_8551', 1441 | // 'font_8552', 1442 | // 'font_8553', 1443 | // 'font_8555', 1444 | // 'font_8556', 1445 | // 'font_8557', 1446 | // 'font_8560', 1447 | // 'font_8611', 1448 | // '_font_8685', 1449 | // 'font_8762', 1450 | // '_font_8921', 1451 | // 'font_9075', 1452 | // '_font_9419', 1453 | // 'font_9519', 1454 | // 'font_9685', 1455 | // '_font_9736', 1456 | // 'font_10330', 1457 | // '_font_10452', 1458 | // '_font_10559', 1459 | // 'font_10566', 1460 | // 'font_11367', 1461 | // '_font_11419', 1462 | // '__font_11810', 1463 | // 'font_11815', 1464 | // 'font_11828', 1465 | // '_font_12222', 1466 | // '_font_12224', 1467 | // '_font_12232', 1468 | // '_font_12467', 1469 | // 'font_12473', 1470 | // '_font_12489', 1471 | // '_font_12499', 1472 | // 'font_13001', 1473 | // 'font_13086', 1474 | // 'font_13088', 1475 | // '_font_13897', 1476 | // '_font_14196', 1477 | // '_font_14343', 1478 | // 'font_14519', 1479 | // 'font_14526', 1480 | // '_font_14534', 1481 | // '__font_14543', 1482 | // 'font_14557', 1483 | // '_font_14564', 1484 | // 'font_14786', 1485 | // '_font_15693', 1486 | // 'font_15908', 1487 | // '__font_15927', 1488 | // '__font_16141', 1489 | // 'font_16460', 1490 | // 'font_16466', 1491 | // '_font_17005', 1492 | // '_font_17486', 1493 | // 'font_17489', 1494 | // 'font_17739', 1495 | // 'font_17923', 1496 | // '_font_18551', 1497 | // '_font_18571', 1498 | // '__font_18964', 1499 | // 'font_18395', 1500 | // 'font_16089', 1501 | // ]; 1502 | } 1503 | protected function resetFonts2() 1504 | { 1505 | return [ 1506 | '+__font_3419', 1507 | '+__font_3439', 1508 | '+__font_180', 1509 | '+__font_3442', 1510 | '+__font_3445', 1511 | '+__font_3450', 1512 | '+__font_3453', 1513 | '+__font_3528', 1514 | '+__font_3865', 1515 | '+__font_3982', 1516 | '+__font_3993', 1517 | '+__font_3996', 1518 | '+__font_4006', 1519 | '+__font_4009', 1520 | '+__font_4012', 1521 | '+__font_4015', 1522 | '+__font_4020', 1523 | '+__font_4032', 1524 | '+__font_4040', 1525 | '+__font_4049', 1526 | '+__font_4057', 1527 | '+__font_4060', 1528 | '+__font_4443', 1529 | '+__font_5446', 1530 | '+__font_5447', 1531 | '+__font_5460', 1532 | '+__font_5976', 1533 | '+__font_10491', 1534 | '+__font_10950', 1535 | '+__font_11508', 1536 | '-__font_11570', 1537 | '+__font_11810', 1538 | '+__font_12429', 1539 | '+__font_13264', 1540 | '+__font_13349', 1541 | '+__font_13985', 1542 | '+__font_15164', 1543 | '+__font_15927', 1544 | '+__font_16141', 1545 | '+__font_16620', 1546 | '+__font_17047', 1547 | '+__font_18231', 1548 | '+__font_18887', 1549 | '+__font_18964', 1550 | '-_font_1252', 1551 | '-_font_1353', 1552 | '+_font_1723', 1553 | '+_font_1864', 1554 | '+_font_2337', 1555 | '-_font_3307', 1556 | '+_font_3468', 1557 | '+_font_3532', 1558 | '+_font_3555', 1559 | '+_font_10612', 1560 | '+_font_10620', 1561 | '+_font_10833', 1562 | '+_font_10897', 1563 | '+_font_10925', 1564 | '+_font_10942', 1565 | '+_font_11030', 1566 | '+_font_11038', 1567 | '+_font_11088', 1568 | '+_font_11180', 1569 | '+_font_11233', 1570 | '+_font_11477', 1571 | '+_font_11679', 1572 | '+_font_11685', 1573 | '+_font_11717', 1574 | '+_font_11741', 1575 | '+_font_11749', 1576 | '+_font_11852', 1577 | '+_font_12222', 1578 | '+_font_12224', 1579 | '+_font_12380', 1580 | '+_font_12381', 1581 | '+_font_12454', 1582 | '+_font_12489', 1583 | '+_font_12499', 1584 | '+_font_12602', 1585 | '+_font_12645', 1586 | '+_font_12708', 1587 | '+_font_12767', 1588 | '+_font_13324', 1589 | '+_font_13430', 1590 | '+_font_13718', 1591 | '+_font_14063', 1592 | '+_font_14196', 1593 | '+_font_14242', 1594 | '+_font_14264', 1595 | '+_font_14892', 1596 | '+_font_14912', 1597 | '+_font_14957', 1598 | '+_font_15065', 1599 | '+_font_15083', 1600 | '+_font_15550', 1601 | '+_font_15662', 1602 | '+_font_15680', 1603 | '+_font_15693', 1604 | '+_font_15766', 1605 | '+_font_15768', 1606 | '+_font_16603', 1607 | '+_font_16622', 1608 | '+_font_16630', 1609 | '+_font_16653', 1610 | '+_font_16707', 1611 | '+_font_16979', 1612 | '+_font_17046', 1613 | '+_font_17078', 1614 | '+_font_17186', 1615 | '+_font_17896', 1616 | '+_font_18267', 1617 | '+_font_18415', 1618 | '+_font_18491', 1619 | '+_font_18531', 1620 | '+_font_18551', 1621 | '+_font_18571', 1622 | '+_font_18591', 1623 | '+_font_18611', 1624 | '+_font_18624', 1625 | '+_font_18641', 1626 | '+_font_18878', 1627 | '+_font_18888', 1628 | '+font_135', 1629 | '+font_163', 1630 | '+font_1193', 1631 | '+font_1217', 1632 | '+font_1219', 1633 | '+font_1269', 1634 | '+font_1271', 1635 | '+font_1272', 1636 | '+font_1303', 1637 | '+font_1305', 1638 | '+font_1334', 1639 | '+font_1354', 1640 | '+font_1356', 1641 | '+font_1359', 1642 | '+font_1370', 1643 | '+font_1447', 1644 | '+font_1462', 1645 | '+font_1467', 1646 | '+font_1468', 1647 | '+font_1476', 1648 | '+font_1490', 1649 | '+font_1499', 1650 | '+font_1504', 1651 | '+font_1562', 1652 | '+font_1603', 1653 | '+font_1608', 1654 | '+font_1630', 1655 | '+font_1641', 1656 | '+font_1649', 1657 | '+font_1664', 1658 | '+font_1683', 1659 | '+font_1691', 1660 | '+font_1761', 1661 | '+font_1766', 1662 | '+font_1768', 1663 | '+font_1785', 1664 | '+font_1804', 1665 | '+font_1851', 1666 | '+font_1863', 1667 | '+font_5177', 1668 | '+font_5185', 1669 | '+font_5911', 1670 | 'font_5923', 1671 | '+font_5925', 1672 | '+font_6416', 1673 | '-+font_7020', 1674 | '+font_8450', 1675 | '+font_8457', 1676 | '+font_8460', 1677 | '+font_9465', 1678 | '+font_9467', 1679 | '+font_9469', 1680 | '+font_9486', 1681 | '+font_9488', 1682 | '+font_9746', 1683 | '+font_9758', 1684 | '+_font_10079', 1685 | '+_font_10247', 1686 | '+font_10310', 1687 | '+font_10316', 1688 | '+font_10475', 1689 | '+font_10855', 1690 | '+font_10900', 1691 | '+font_10949', 1692 | '+font_10963', 1693 | '+font_10972', 1694 | '+font_10981', 1695 | '+font_11004', 1696 | '+font_11049', 1697 | '+font_11057', 1698 | '+font_11111', 1699 | '+font_11120', 1700 | '+font_11124', 1701 | '+font_11127', 1702 | '+font_11128', 1703 | '+font_11149', 1704 | '+font_11147', 1705 | '+font_11148', 1706 | '+font_11548', 1707 | '+font_11549', 1708 | '+font_11565', 1709 | '+font_11571', 1710 | '+font_11800', 1711 | '+font_11802', 1712 | '+font_11803', 1713 | '+font_11806', 1714 | '+font_12205', 1715 | '+font_12206', 1716 | '+font_12300', 1717 | '+font_12307', 1718 | '+font_12343', 1719 | '+font_12346', 1720 | '+font_12386', 1721 | '+font_12394', 1722 | '+font_12402', 1723 | '+font_12407', 1724 | '+font_12552', 1725 | '+font_12559', 1726 | '+font_12561', 1727 | '+font_12567', 1728 | '+font_12579', 1729 | '+font_12588', 1730 | '+font_12594', 1731 | '+font_12615', 1732 | '+font_12627', 1733 | 'font_12652', 1734 | '+font_12702', 1735 | '+font_12725', 1736 | 'font_12723', 1737 | '+font_12725', 1738 | '+font_12728', 1739 | '+font_12743', 1740 | '+font_12757', 1741 | '+font_12759', 1742 | '+font_12785', 1743 | '+font_12804', 1744 | '+font_12822', 1745 | '+font_12823', 1746 | '+font_12825', 1747 | '+font_12866', 1748 | '+font_12916', 1749 | '+font_12929', 1750 | '+font_12938', 1751 | 'font_12958', 1752 | '+font_12963', 1753 | '+font_12969', 1754 | '+font_12970', 1755 | '+font_12993', 1756 | '-+font_13029', 1757 | '+font_13033', 1758 | '+font_13068', 1759 | '+font_13071', 1760 | '+font_13108', 1761 | '+font_13116', 1762 | '+font_13134', 1763 | '+font_13139', 1764 | '+font_13153', 1765 | '+font_13157', 1766 | '+font_13158', 1767 | '+font_13171', 1768 | '+font_13177', 1769 | '+_font_13183', 1770 | '+font_13190', 1771 | '+_font_13192', 1772 | '+font_13196', 1773 | '+font_13224', 1774 | '+font_13225', 1775 | '+font_13227', 1776 | '+font_13270', 1777 | '+font_13291', 1778 | '+font_13298', 1779 | '+font_13341', 1780 | '+font_13350', 1781 | '+font_13351', 1782 | '+font_13363', 1783 | '+font_13370', 1784 | '+font_13413', 1785 | '+font_13425', 1786 | '+font_13440', 1787 | '+font_13449', 1788 | '+font_13471', 1789 | '+font_13477', 1790 | '+font_13532', 1791 | '+font_13551', 1792 | '+font_13555', 1793 | '+font_13574', 1794 | '+font_13599', 1795 | '+font_13602', 1796 | '+font_13622', 1797 | '+font_13662', 1798 | '+font_13712', 1799 | '+font_13715', 1800 | '+font_13725', 1801 | '+font_13728', 1802 | '+font_13758', 1803 | '+_font_13759', 1804 | '+font_13763', 1805 | '+font_13764', 1806 | '__font_13767', 1807 | '+font_13828', 1808 | '+font_13827', 1809 | '+font_13858', 1810 | '+font_13860', 1811 | '+font_13866', 1812 | '+font_13870', 1813 | '+font_13875', 1814 | '+font_13879', 1815 | 'font_13880', 1816 | '+font_13886', 1817 | '+font_13923', 1818 | '+font_13944', 1819 | '+font_13971', 1820 | 'font_13999', 1821 | '+font_14000', 1822 | '+font_14004', 1823 | '+font_14011', 1824 | '+font_14013', 1825 | '+font_14017', 1826 | '+font_14028', 1827 | '+font_14037', 1828 | '+font_14040', 1829 | '+font_14057', 1830 | '+font_14062', 1831 | '+font_14067', 1832 | '+font_14068', 1833 | '+font_14079', 1834 | 'font_14086', 1835 | 'font_14091', 1836 | '+font_14097', 1837 | 'font_14106', 1838 | '+font_14142', 1839 | 'font_14161', 1840 | '__font_14167', 1841 | '+font_14265', 1842 | '+font_14271', 1843 | '+font_14281', 1844 | '+font_14285', 1845 | '+font_14286', 1846 | '+font_14300', 1847 | '+font_14312', 1848 | '+font_14333', 1849 | '+font_14357', 1850 | '+font_14368', 1851 | '+font_14383', 1852 | '+font_14394', 1853 | '+font_14403', 1854 | '+font_14406', 1855 | '+_font_14418', 1856 | '+font_14497', 1857 | '_font_14500', 1858 | '+font_14592', 1859 | '+font_14640', 1860 | '+font_14668', 1861 | '+font_14669', 1862 | '+font_14671', 1863 | '+font_14673', 1864 | '+font_14676', 1865 | '+font_14680', 1866 | '+font_14687', 1867 | '+font_14710', 1868 | '+font_14732', 1869 | '+font_14761', 1870 | '+font_14768', 1871 | '+font_14810', 1872 | '+font_14808', 1873 | '+font_14817', 1874 | '+font_14855', 1875 | '+font_14888', 1876 | '+font_14894', 1877 | '+font_14907', 1878 | 'font_14928', 1879 | '+font_14960', 1880 | '+font_14965', 1881 | '+font_14968', 1882 | '+font_14971', 1883 | '+font_14977', 1884 | '+font_14980', 1885 | '+font_14981', 1886 | '+font_14983', 1887 | '+font_14990', 1888 | '+font_15038', 1889 | '+font_15043', 1890 | '+font_15051', 1891 | '+font_15055', 1892 | '+font_15056', 1893 | '+font_15057', 1894 | '+font_15066', 1895 | '+font_15086', 1896 | '+font_15109', 1897 | '+font_15112', 1898 | '+font_15113', 1899 | '+_font_15123', 1900 | '+font_15124', 1901 | '+font_15132', 1902 | '+font_15159', 1903 | '+font_15160', 1904 | '+font_15162', 1905 | '+font_15166', 1906 | '+font_15170', 1907 | '+font_15172', 1908 | '+font_15182', 1909 | '+font_15183', 1910 | '+font_15184', 1911 | '+font_15185', 1912 | '+font_15193', 1913 | '+font_15315', 1914 | '+font_15321', 1915 | '+font_15353', 1916 | '+font_15355', 1917 | '+font_15356', 1918 | '+font_15374', 1919 | '+font_15378', 1920 | '+font_15379', 1921 | '+font_15403', 1922 | '+font_15414', 1923 | '+font_15434', 1924 | 'font_15444', 1925 | '+font_15449', 1926 | '+font_15450', 1927 | '__font_15487', 1928 | '+font_15488', 1929 | '+__font_15489', 1930 | '+font_15499', 1931 | '+font_15502', 1932 | '_font_15503', 1933 | '+font_15517', 1934 | '+font_15518', 1935 | '+font_15519', 1936 | '_font_15523', 1937 | '+font_15524', 1938 | '+font_15525', 1939 | '+font_15541', 1940 | '+font_15543', 1941 | '+font_15549', 1942 | '+font_15556', 1943 | 'font_15580', 1944 | '+font_15584', 1945 | '+font_15590', 1946 | 'font_15594', 1947 | '+font_15604', 1948 | '+font_15628', 1949 | '+font_15633', 1950 | '+font_15658', 1951 | 'font_15659', 1952 | '+font_15671', 1953 | '+font_15685', 1954 | '+font_15687', 1955 | '+font_15713', 1956 | 'font_15717', 1957 | '__font_15723', 1958 | '+font_15726', 1959 | '_font_15728', 1960 | '+font_15748', 1961 | '+font_15762', 1962 | '+font_15760', 1963 | '+font_15787', 1964 | '_font_15793', 1965 | '+font_15799', 1966 | '+font_15801', 1967 | '+__font_15809', 1968 | 'font_15811', 1969 | '+font_15817', 1970 | '__font_15831', 1971 | 'font_15847', 1972 | '+font_15855', 1973 | '+font_15865', 1974 | '+font_15873', 1975 | '+font_15875', 1976 | '+font_15881', 1977 | '+font_15875', 1978 | '+font_15881', 1979 | '+font_15892', 1980 | '+font_15895', 1981 | '+font_15932', 1982 | '+__font_15973', 1983 | 'font_15974', 1984 | '+font_15978', 1985 | '+font_15982', 1986 | '__font_15984', 1987 | '+font_15987', 1988 | '+font_15995', 1989 | '+font_16007', 1990 | '+font_16017', 1991 | '+font_16032', 1992 | '+font_16034', 1993 | '+font_16037', 1994 | '__font_16036', 1995 | '+font_16048', 1996 | '+font_16049', 1997 | '+font_16053', 1998 | 'font_16058', 1999 | '+font_16063', 2000 | '+font_16077', 2001 | '+font_16080', 2002 | '+font_16082', 2003 | '+font_16083', 2004 | '_font_16089', 2005 | '+font_16104', 2006 | 'font_16117', 2007 | '+font_16122', 2008 | '+font_16131', 2009 | 'font_16132', 2010 | '+font_16164', 2011 | '+font_16169', 2012 | '+font_16184', 2013 | '+font_16187', 2014 | '+font_16198', 2015 | '+font_16214', 2016 | 'font_16237', 2017 | 'font_16238', 2018 | '+font_16252', 2019 | '+font_16259', 2020 | '+font_16261', 2021 | '+font_16266', 2022 | '+font_16286', 2023 | '+font_16295', 2024 | '+font_16302', 2025 | '+font_16331', 2026 | '+font_16338', 2027 | '+font_16339', 2028 | '+font_16345', 2029 | '+font_16352', 2030 | '+font_16358', 2031 | '+font_16375', 2032 | '+font_16407', 2033 | '+font_16422', 2034 | '+font_16478', 2035 | 'font_16488', 2036 | '+font_16494', 2037 | '+font_16495', 2038 | '+font_16512', 2039 | '+font_16527', 2040 | '+font_16541', 2041 | '+font_16552', 2042 | '+font_16557', 2043 | '+font_16559', 2044 | '_font_16575', 2045 | '+font_16576', 2046 | '+font_16605', 2047 | '+font_16626', 2048 | '+font_16631', 2049 | '+font_16633', 2050 | 'font_16639', 2051 | '+font_16659', 2052 | '+font_16660', 2053 | '+font_16671', 2054 | '+font_16676', 2055 | '+font_16701', 2056 | '+font_16702', 2057 | '+font_16710', 2058 | '+_font_16724', 2059 | '+_font_16745', 2060 | '+font_16749', 2061 | 'font_16823', 2062 | '+font_16840', 2063 | '+font_16849', 2064 | '+font_16866', 2065 | '+font_16870', 2066 | '+font_16874', 2067 | '+font_16881', 2068 | '+font_16891', 2069 | '_font_16911', 2070 | '+font_16913', 2071 | '+font_16928', 2072 | '+font_16930', 2073 | '+font_16945', 2074 | '+font_16948', 2075 | '+font_16951', 2076 | '+font_16953', 2077 | '+font_16955', 2078 | '_font_16977', 2079 | '+font_16981', 2080 | '+font_16990', 2081 | '+font_16991', 2082 | '+font_16996', 2083 | '+font_17025', 2084 | '+font_17028', 2085 | '+font_17050', 2086 | '+font_17053', 2087 | '+font_17066', 2088 | '+font_17074', 2089 | '+font_17085', 2090 | '+font_17105', 2091 | '+font_17120', 2092 | '+font_17122', 2093 | '+font_17141', 2094 | '+font_17160', 2095 | '+font_17161', 2096 | '+font_17171', 2097 | '+font_17178', 2098 | '+font_17192', 2099 | 'font_17196', 2100 | '+font_17213', 2101 | 'font_17215', 2102 | '+font_17304', 2103 | '+font_17308', 2104 | '+font_17309', 2105 | '+font_17312', 2106 | '+font_17314', 2107 | '+font_17325', 2108 | 'font_17330', 2109 | '+font_17346', 2110 | '+font_17347', 2111 | '+font_17362', 2112 | '+font_17363', 2113 | '+font_17367', 2114 | '+font_17368', 2115 | '+font_17371', 2116 | '+font_17400', 2117 | '+_font_17404', 2118 | '+font_17416', 2119 | '+font_17466', 2120 | '+font_17475', 2121 | '+font_17511', 2122 | '+font_17518', 2123 | '+font_17522', 2124 | '+font_17528', 2125 | '+font_17536', 2126 | '+font_17539', 2127 | '+font_17543', 2128 | '+font_17613', 2129 | '+font_17662', 2130 | '+font_17663', 2131 | '+font_17668', 2132 | '+font_17670', 2133 | 'font_17673', 2134 | '+font_17675', 2135 | '+font_17690', 2136 | '+font_17701', 2137 | '+font_17747', 2138 | '+font_17749', 2139 | 'font_17769', 2140 | '+font_17771', 2141 | '+font_17784', 2142 | '+font_17806', 2143 | '_font_17842', 2144 | '+font_17861', 2145 | '+font_17873', 2146 | '+font_17885', 2147 | '+font_17894', 2148 | '+font_17915', 2149 | '+font_17941', 2150 | '+font_17957', 2151 | '+font_17958', 2152 | '+font_17959', 2153 | '+font_17962', 2154 | '+font_17963', 2155 | '+font_17973', 2156 | '+font_17981', 2157 | 'font_17998', 2158 | '+font_18014', 2159 | '+font_18023', 2160 | '+font_18050', 2161 | '+font_18059', 2162 | '+font_18060', 2163 | '+font_18078', 2164 | '+__font_18080', 2165 | '+font_18138', 2166 | '+font_18160', 2167 | '+font_18164', 2168 | '+font_18171', 2169 | '+font_18173', 2170 | '+font_18182', 2171 | '+font_18207', 2172 | '+font_18209', 2173 | '+font_18221', 2174 | 'font_18224', 2175 | '+font_18256', 2176 | '+font_18270', 2177 | '+font_18274', 2178 | '+font_18285', 2179 | '+font_18288', 2180 | '+font_18297', 2181 | '+_font_18328', 2182 | 'font_18341', 2183 | '+font_18344', 2184 | '+font_18345', 2185 | '+font_18360', 2186 | '+font_18370', 2187 | '+font_18381', 2188 | '+font_18387', 2189 | '+font_18398', 2190 | '+font_18408', 2191 | '+font_18422', 2192 | '+font_18434', 2193 | '+font_18436', 2194 | '+font_18444', 2195 | '+font_18446', 2196 | '+font_18448', 2197 | '+font_18479', 2198 | '+font_18485', 2199 | '+font_18488', 2200 | '+font_18499', 2201 | '+font_18505', 2202 | '+font_18508', 2203 | '+_font_18511', 2204 | '+font_18519', 2205 | '+font_18525', 2206 | '+font_18528', 2207 | '+font_18539', 2208 | '+font_18585', 2209 | '+font_18588', 2210 | '+font_18599', 2211 | '+font_18605', 2212 | '+font_18608', 2213 | '+font_18619', 2214 | '+font_18621', 2215 | '+font_18632', 2216 | '+font_18635', 2217 | '+font_18642', 2218 | '+font_18644', 2219 | '+font_18674', 2220 | '+font_18708', 2221 | '+font_18714', 2222 | '+font_18794', 2223 | '+font_18811', 2224 | '+font_18813', 2225 | '+font_18818', 2226 | '+font_18820', 2227 | '+font_18824', 2228 | '+font_18831', 2229 | '+font_18869', 2230 | '+font_18912', 2231 | '+font_18917', 2232 | '+font_18921', 2233 | '+font_18926', 2234 | '+font_18930', 2235 | '+font_18969', 2236 | '+font_18972', 2237 | '_font_19012', 2238 | '+font_19022', 2239 | '+font_19023', 2240 | '+font_19028', 2241 | '-__font_14167', 2242 | '+font_1440', 2243 | '+font_1722', 2244 | '+font_3949', 2245 | '+font_11008', 2246 | '+font_11652', 2247 | '+font_13646', 2248 | '+font_13853', 2249 | '+font_14132', 2250 | 'font_14291', 2251 | '+font_15670', 2252 | '+font_16644', 2253 | '+font_16906', 2254 | '+font_17133', 2255 | '+font_17583', 2256 | '+font_17598', 2257 | '+font_17659', 2258 | '+font_17037', 2259 | '+font_17133', 2260 | '+font_17289', 2261 | 'font_17460', 2262 | '+font_17583', 2263 | '__font_17831', 2264 | '_font_18007', 2265 | 'font_18223', 2266 | '_font_18257', 2267 | '_font_18331', 2268 | '+font_18335', 2269 | 'font_18416', 2270 | 'font_18628', 2271 | 'font_18853', 2272 | '+font_19005', 2273 | '__font_7695', 2274 | 2275 | 2276 | 2277 | 2278 | 2279 | 2280 | 2281 | 2282 | 2283 | '+_font_641', 2284 | '+_font_5902', 2285 | '+_font_8685', 2286 | '+_font_8921', 2287 | '+_font_9393', 2288 | '+_font_14332', 2289 | '+_font_14337', 2290 | '+_font_14340', 2291 | '+_font_14360', 2292 | '+_font_14564', 2293 | '+_font_14797', 2294 | '+font_23', 2295 | '+font_30', 2296 | '+font_53', 2297 | '+font_69', 2298 | '+font_80', 2299 | '+font_215', 2300 | '+font_233', 2301 | '+font_238', 2302 | '+font_258', 2303 | 'font_269', 2304 | '+font_293', 2305 | 'font_318', 2306 | 'font_340', 2307 | '+font_643', 2308 | '+font_749', 2309 | '+font_770', 2310 | '+font_1001', 2311 | '+font_999', 2312 | '+font_1038', 2313 | '+font_1205', 2314 | '+font_1523', 2315 | '+font_1571', 2316 | '+font_1724', 2317 | '+font_1875', 2318 | '+font_1926', 2319 | '+font_1956', 2320 | '+font_1966', 2321 | 'font_1969', 2322 | '+font_2005', 2323 | '+font_2008', 2324 | '+font_2011', 2325 | '+font_2014', 2326 | '+font_2018', 2327 | '+font_2023', 2328 | 'font_2031', 2329 | '+font_2039', 2330 | 'font_2041', 2331 | '+font_2066', 2332 | 'font_2099', 2333 | '+font_2101', 2334 | '+font_2108', 2335 | '+font_2110', 2336 | '+font_2121', 2337 | '+font_2124', 2338 | '+font_2129', 2339 | '+font_2132', 2340 | '+font_2137', 2341 | '+font_2149', 2342 | '+font_2157', 2343 | '+font_2159', 2344 | '+font_2161', 2345 | '+font_2167', 2346 | '+font_2176', 2347 | '+font_2199', 2348 | '+font_2235', 2349 | '+font_2239', 2350 | '+font_2272', 2351 | '+font_2289', 2352 | '_font_2290', 2353 | '+font_2357', 2354 | '+font_2370', 2355 | '+font_2392', 2356 | '+font_2406', 2357 | '+font_2422', 2358 | '+font_2439', 2359 | '+font_2450', 2360 | '+font_2474', 2361 | '+font_2534', 2362 | '+font_2550', 2363 | '+font_2559', 2364 | '+font_2563', 2365 | '+font_2564', 2366 | '+font_2567', 2367 | '+font_2596', 2368 | '+font_2604', 2369 | '+font_2612', 2370 | '+font_2625', 2371 | '+font_2637', 2372 | '+font_2638', 2373 | '+font_2676', 2374 | '+font_2684', 2375 | '+font_2687', 2376 | '+font_2695', 2377 | '+font_2696', 2378 | '+font_2704', 2379 | '+font_2728', 2380 | '+font_2760', 2381 | '+font_2774', 2382 | '+font_2782', 2383 | '+font_2822', 2384 | '+font_2853', 2385 | '+font_2860', 2386 | '+font_2892', 2387 | '+font_2940', 2388 | '+font_3132', 2389 | '+font_3135', 2390 | '+font_3146', 2391 | '+font_3163', 2392 | '+font_3208', 2393 | '+font_3216', 2394 | '+font_3228', 2395 | '+font_3247', 2396 | '+font_3252', 2397 | '+font_3272', 2398 | '+font_3303', 2399 | '+font_3343', 2400 | '+font_3347', 2401 | '+font_3353', 2402 | 'font_3381', 2403 | '+font_3418', 2404 | '+font_3423', 2405 | '+font_3427', 2406 | '+font_3444', 2407 | '+font_3448', 2408 | '+font_3459', 2409 | '+font_3475', 2410 | '+font_3499', 2411 | '+font_3504', 2412 | '+font_3534', 2413 | '+font_3535', 2414 | '+font_3539', 2415 | '+font_3556', 2416 | '+font_3571', 2417 | '+font_3572', 2418 | '+font_3586', 2419 | '+font_3588', 2420 | '+font_3594', 2421 | '+font_3630', 2422 | '+font_3634', 2423 | '+font_3650', 2424 | '+font_3656', 2425 | '+font_3661', 2426 | '+font_3665', 2427 | '+font_3668', 2428 | '+font_3671', 2429 | '+font_3687', 2430 | '+font_3699', 2431 | '+font_3702', 2432 | '+font_3711', 2433 | '_font_3717', 2434 | '+font_3719', 2435 | '+font_3739', 2436 | '+font_3744', 2437 | '+font_3790', 2438 | '+font_3795', 2439 | '+font_3847', 2440 | '+font_3848', 2441 | 'font_3849', 2442 | '+font_3850', 2443 | '+font_3859', 2444 | '+font_3985', 2445 | '+font_4016', 2446 | '+font_4092', 2447 | '+font_4113', 2448 | '+font_4119', 2449 | '+font_4141', 2450 | '+font_4251', 2451 | '+font_4255', 2452 | '+font_4356', 2453 | '+font_4362', 2454 | 'font_4370', 2455 | '+font_4382', 2456 | '+font_4412', 2457 | '+font_4417', 2458 | '+font_4836', 2459 | '+font_4864', 2460 | '+font_4886', 2461 | '+font_4908', 2462 | 'font_4998', 2463 | '+font_5005', 2464 | 'font_5009', 2465 | '+font_5014', 2466 | '+font_5023', 2467 | '+font_5041', 2468 | '+font_5044', 2469 | '+font_5095', 2470 | '+font_5098', 2471 | '+font_5117', 2472 | '+font_5135', 2473 | '+font_5146', 2474 | '+font_5158', 2475 | '+font_5216', 2476 | '+font_5231', 2477 | '+font_5235', 2478 | '+font_5239', 2479 | '+font_5247', 2480 | '+font_5251', 2481 | '+font_5277', 2482 | '+font_5337', 2483 | 'font_5350', 2484 | '+font_5372', 2485 | 'font_5376', 2486 | '+font_5383', 2487 | '+font_5404', 2488 | '+font_5415', 2489 | '+font_5418', 2490 | '+font_5425', 2491 | '+font_5341', 2492 | '+font_5442', 2493 | '+font_5452', 2494 | '+font_5462', 2495 | '+font_5465', 2496 | '+font_5495', 2497 | '+font_5524', 2498 | 'font_5528', 2499 | '+font_5531', 2500 | '+font_5534', 2501 | '+font_5542', 2502 | '+font_5557', 2503 | '+font_5563', 2504 | '+font_5589', 2505 | '+font_5598', 2506 | '+font_5604', 2507 | '+font_5623', 2508 | '+font_5635', 2509 | '+font_5644', 2510 | 'font_5656', 2511 | '+font_5669', 2512 | '+font_5673', 2513 | '+font_5684', 2514 | '+font_5704', 2515 | '+font_5725', 2516 | '+font_5739', 2517 | '+font_5741', 2518 | '+font_5783', 2519 | '+font_5808', 2520 | '+font_5809', 2521 | '+font_5815', 2522 | '+font_5835', 2523 | '+font_5853', 2524 | '+font_5883', 2525 | '+font_5884', 2526 | '+font_5893', 2527 | '+font_5894', 2528 | '+font_5969', 2529 | '+font_6024', 2530 | '+font_6026', 2531 | '+font_6030', 2532 | '+font_6061', 2533 | '+font_6062', 2534 | '+font_6064', 2535 | '+font_6079', 2536 | '+font_6085', 2537 | '+font_6111', 2538 | '+font_6117', 2539 | '+font_6121', 2540 | '+font_6155', 2541 | '+font_6182', 2542 | '+font_6186', 2543 | '+font_6198', 2544 | '+font_6202', 2545 | '+font_6232', 2546 | '+font_6242', 2547 | '+font_6266', 2548 | '+font_6272', 2549 | '+font_6296', 2550 | '+font_6308', 2551 | '+font_6310', 2552 | '+font_6322', 2553 | '+font_6328', 2554 | '+font_6334', 2555 | '+font_6359', 2556 | '+font_6368', 2557 | '+font_6373', 2558 | 'font_6379', 2559 | '+font_6401', 2560 | '+font_6435', 2561 | '+font_6464', 2562 | '+font_6476', 2563 | '+font_6478', 2564 | '+font_6489', 2565 | '+font_6506', 2566 | '+font_6518', 2567 | '+font_6585', 2568 | 'font_6642', 2569 | '+font_6670', 2570 | '+font_6683', 2571 | '+font_6684', 2572 | '+font_6703', 2573 | '+font_6704', 2574 | '+font_6726', 2575 | '+font_6730', 2576 | '+font_6731', 2577 | 'font_6757', 2578 | 'font_6761', 2579 | '+font_6764', 2580 | '+font_6805', 2581 | '+font_6813', 2582 | '+font_6815', 2583 | '+font_6835', 2584 | '+font_6837', 2585 | '+font_6838', 2586 | 'font_6903', 2587 | '+font_6928', 2588 | '+font_6970', 2589 | '+font_7020', 2590 | '+font_7138', 2591 | '+font_7149', 2592 | '+font_7161', 2593 | '+font_7162', 2594 | 'font_7167', 2595 | '+font_7171', 2596 | '+font_7172', 2597 | '+font_7173', 2598 | '+font_7174', 2599 | '+font_7302', 2600 | '+font_7303', 2601 | '+font_7310', 2602 | 'font_7313', 2603 | '+font_7314', 2604 | '+font_7320', 2605 | '+font_7324', 2606 | 'font_7327', 2607 | '+font_7330', 2608 | '+font_7335', 2609 | '+font_7337', 2610 | 'font_7341', 2611 | '+font_7343', 2612 | '+font_7344', 2613 | 'font_7380', 2614 | '+font_7390', 2615 | '+font_7418', 2616 | '+font_7444', 2617 | 'font_7445', 2618 | 'font_7473', 2619 | '+font_7498', 2620 | '+font_7502', 2621 | '+font_7512', 2622 | '+font_7559', 2623 | '+font_7579', 2624 | '+font_7584', 2625 | '+font_7618', 2626 | '+font_7628', 2627 | '+font_7656', 2628 | 'font_7675', 2629 | '+font_7693', 2630 | '_font_7695', 2631 | 'font_7777', 2632 | '+font_7901', 2633 | '+font_7905', 2634 | '+font_7908', 2635 | '+font_7912', 2636 | '+font_7928', 2637 | '+font_7991', 2638 | '+font_7992', 2639 | '+font_7993', 2640 | 'font_8034', 2641 | '+font_8052', 2642 | '+font_8157', 2643 | 'font_8163', 2644 | 'font_8170', 2645 | '+font_8229', 2646 | 'font_8288', 2647 | '+font_8322', 2648 | '+font_8389', 2649 | '+font_8408', 2650 | '+font_8425', 2651 | '+font_8447', 2652 | '+font_8558', 2653 | '+font_8570', 2654 | '+font_8584', 2655 | '+font_8585', 2656 | '+font_8590', 2657 | '+font_8599', 2658 | '+font_8682', 2659 | '+font_8686', 2660 | '+font_8690', 2661 | '+font_8765', 2662 | '+font_8771', 2663 | '+font_8772', 2664 | '+font_8778', 2665 | '+font_8821', 2666 | '+font_8858', 2667 | '+font_8862', 2668 | '+font_8885', 2669 | '+font_8904', 2670 | '+font_8906', 2671 | '+font_8937', 2672 | '+font_8939', 2673 | '+font_8940', 2674 | '+font_8956', 2675 | '+font_8968', 2676 | '+font_8990', 2677 | '+font_9001', 2678 | '+font_9006', 2679 | '+font_9022', 2680 | 'font_9031', 2681 | '+font_9037', 2682 | '+font_9051', 2683 | '+font_9065', 2684 | '+font_9114', 2685 | '+font_9331', 2686 | '+font_9348', 2687 | '+font_9350', 2688 | '+font_9354', 2689 | '+font_9389', 2690 | '+font_9409', 2691 | 'font_9412', 2692 | '+font_9417', 2693 | '+font_9420', 2694 | '+font_9425', 2695 | '+font_9428', 2696 | '+font_9429', 2697 | '+font_9430', 2698 | '+font_9453', 2699 | '+font_9455', 2700 | '+font_9457', 2701 | '+font_9502', 2702 | 'font_9505', 2703 | '+font_9508', 2704 | '+font_9520', 2705 | 'font_9528', 2706 | '+font_9555', 2707 | '+_font_9560', 2708 | '+font_9571', 2709 | '+__font_9573', 2710 | '+font_9613', 2711 | '+font_9624', 2712 | '+font_9628', 2713 | '+font_9630', 2714 | '+font_9709', 2715 | '+font_9720', 2716 | '+font_9732', 2717 | '+font_9769', 2718 | '+font_9773', 2719 | '+font_9775', 2720 | '+font_9778', 2721 | '+font_9779', 2722 | '+_font_9783', 2723 | '+font_9785', 2724 | '+font_9811', 2725 | '+font_10102', 2726 | '__font_10188', 2727 | '+font_10198', 2728 | '+font_10200', 2729 | '+font_10201', 2730 | '+font_10302', 2731 | '+font_10339', 2732 | '+font_10346', 2733 | '+font_10351', 2734 | '+font_10369', 2735 | '_font_10373', 2736 | '+font_10451', 2737 | '+font_10502', 2738 | '+font_10517', 2739 | '+font_10521', 2740 | '+font_10526', 2741 | '+font_10527', 2742 | '+font_10529', 2743 | '+font_10530', 2744 | 'font_10535', 2745 | '+font_10549', 2746 | '+font_10550', 2747 | '+font_10553', 2748 | '+font_10556', 2749 | '+font_10560', 2750 | '+font_10568', 2751 | '+font_10578', 2752 | '+font_10603', 2753 | '+font_10605', 2754 | '+font_10613', 2755 | '+font_10623', 2756 | '+font_10624', 2757 | '+font_10638', 2758 | '+font_10639', 2759 | '+font_10649', 2760 | '+font_10653', 2761 | '+font_10681', 2762 | '+font_10702', 2763 | '+font_10711', 2764 | '+font_10721', 2765 | '+font_10748', 2766 | '+font_10750', 2767 | '+font_10757', 2768 | '+font_10767', 2769 | '+font_10793', 2770 | '+font_10795', 2771 | '+font_10836', 2772 | '+font_10841', 2773 | '+font_10851', 2774 | '+font_10879', 2775 | '+font_10922', 2776 | '+font_10927', 2777 | '+font_10934', 2778 | '+font_11011', 2779 | '+font_11023', 2780 | '+font_11028', 2781 | '+font_11108', 2782 | 'font_11109', 2783 | '+font_11206', 2784 | '+font_11207', 2785 | '+font_11219', 2786 | '+font_11220', 2787 | '+font_11221', 2788 | '+font_11224', 2789 | '+font_11230', 2790 | 'font_11250', 2791 | '+font_11258', 2792 | '+font_11261', 2793 | '+_font_11272', 2794 | '+_font_11274', 2795 | '+font_11284', 2796 | '_font_11285', 2797 | '+font_11298', 2798 | '+font_11306', 2799 | '+font_11315', 2800 | '+font_11323', 2801 | '+_font_11324', 2802 | '+font_11336', 2803 | '+font_11337', 2804 | '+font_11345', 2805 | '+font_11349', 2806 | '+font_11350', 2807 | '+font_11351', 2808 | '+_font_11359', 2809 | '+font_11365', 2810 | '+font_11372', 2811 | '+font_11381', 2812 | '+font_11397', 2813 | '+font_11406', 2814 | '+font_11412', 2815 | '+font_11428', 2816 | '+_font_11437', 2817 | '+font_11453', 2818 | '+font_11461', 2819 | '+font_11465', 2820 | '+font_11467', 2821 | '+font_11478', 2822 | '_font_11486', 2823 | '+font_11494', 2824 | '+font_11589', 2825 | '+font_11593', 2826 | '+font_11616', 2827 | '+font_11623', 2828 | '+_font_11626', 2829 | '+font_11643', 2830 | '+font_11695', 2831 | '+font_11697', 2832 | '+font_11703', 2833 | '+font_11705', 2834 | '+font_11728', 2835 | '+font_11778', 2836 | '+font_11785', 2837 | '+font_11826', 2838 | '+font_11870', 2839 | '+font_12233', 2840 | '+font_12244', 2841 | '+font_12255', 2842 | '+font_12261', 2843 | '+font_12263', 2844 | '+font_12268', 2845 | '+font_12372', 2846 | '+_font_12375', 2847 | '+font_12440', 2848 | '+font_12444', 2849 | '+font_12493', 2850 | '+font_12503', 2851 | '+font_12508', 2852 | '+font_12684', 2853 | '+font_12685', 2854 | '+font_12686', 2855 | '+font_12877', 2856 | '+font_12879', 2857 | '+font_13011', 2858 | '+font_13014', 2859 | '+font_13091', 2860 | '+font_13464', 2861 | '+font_13893', 2862 | '+font_13896', 2863 | '+font_13899', 2864 | '+__font_13915', 2865 | '+font_14109', 2866 | '_font_14184', 2867 | '+font_14208', 2868 | '+font_14523', 2869 | '+font_14525', 2870 | '+font_14530', 2871 | '+font_14542', 2872 | '+font_14574', 2873 | '+font_14580', 2874 | '+font_14586', 2875 | '+font_14589', 2876 | '+font_14696', 2877 | '+font_15026', 2878 | '+font_15031', 2879 | '+font_15029', 2880 | '+font_15035', 2881 | '+font_15205', 2882 | '+font_15399', 2883 | '+font_15402', 2884 | '+font_15700', 2885 | '+font_15702', 2886 | '+font_15703', 2887 | '+font_16148', 2888 | '+font_16149', 2889 | '+_font_16454', 2890 | '+font_16465', 2891 | '+font_16616', 2892 | '+font_16974', 2893 | '+font_17232', 2894 | '+font_17235', 2895 | '+font_17501', 2896 | '+font_17717', 2897 | '+font_17720', 2898 | '+font_17722', 2899 | '+font_17928', 2900 | '+font_18304', 2901 | '+font_18545', 2902 | '+font_18548', 2903 | '+font_18559', 2904 | '+font_18565', 2905 | '+font_18568', 2906 | '+font_18579', 2907 | 'font_18952', 2908 | '+font_18955', 2909 | '+font_417', 2910 | '+font_2530', 2911 | 2912 | 2913 | '-__font_3294', 2914 | 2915 | 2916 | '+font_438', 2917 | '+font_2078', 2918 | '+font_2343', 2919 | '+font_2510', 2920 | '+font_2698', 2921 | '+font_3100', 2922 | '+font_3103', 2923 | '+font_3101', 2924 | '+font_3373', 2925 | '+font_4217', 2926 | 'font_5030', 2927 | '+font_5431', 2928 | '+font_5658', 2929 | '+__font_6397', 2930 | 'font_7319', 2931 | '__font_7646', 2932 | 'font_8660', 2933 | '+font_8733', 2934 | '__font_8738', 2935 | '__font_10821', 2936 | '+font_10943', 2937 | '+font_11050', 2938 | '+font_11069', 2939 | '+font_11091', 2940 | '+font_11095', 2941 | '+font_11737', 2942 | '+font_11859', 2943 | '+font_12293', 2944 | '+font_12296', 2945 | '+font_12379', 2946 | '+font_12518', 2947 | '+font_12565', 2948 | '+font_13534', 2949 | '+font_13765', 2950 | '+font_14800', 2951 | '+font_15393', 2952 | '+font_15902', 2953 | '+font_15907', 2954 | '+font_17252', 2955 | '+font_17480', 2956 | '+font_17488', 2957 | ]; 2958 | } 2959 | } -------------------------------------------------------------------------------- /application/Command/TestFontCommand.php: -------------------------------------------------------------------------------- 1 | setName('command:captcha-font-test')//这里的command:name即是调用名称,如改成make:controller,是调用方式将变为php app make:controller 19 | ->setDescription('生成文字图片') 20 | ->setDefinition([ 21 | new InputArgument('save-path', InputArgument::OPTIONAL, '生成的图片保存目录', './data'), 22 | new InputArgument('font-number', InputArgument::OPTIONAL, '第n个字体文件', 0), 23 | new InputArgument('font-end', InputArgument::OPTIONAL, '第n个字体文件结束', 0), 24 | new InputArgument('img-width', InputArgument::OPTIONAL, '图片宽度', 300), 25 | new InputArgument('img-height', InputArgument::OPTIONAL, '图片宽度', 150), 26 | ])->setHelp('没得啥子可帮助的'); 27 | } 28 | 29 | 30 | protected function execute(InputInterface $input, OutputInterface $output) 31 | { 32 | $save_path = $input->getArgument('save-path'); 33 | $bath_size = 1; 34 | $font_number = $input->getArgument('font-number'); 35 | $font_end = $input->getArgument('font-end'); 36 | $img_width = $input->getArgument('img-width'); 37 | $img_height = $input->getArgument('img-height'); 38 | 39 | $this->widget = $this->buildWidgetLengthNumber(); 40 | $this->max_widget = count($this->widget) - 1; 41 | 42 | $n = 1; 43 | $builder = new Captcha(); 44 | 45 | $font_count = $font_end ? $font_end : count($builder->getFonts()); 46 | 47 | for ($i = $font_number; $i < $font_count; ++$i) { 48 | 49 | $font = $builder->getFonts()[ $i ]; 50 | 51 | for ($k = 0; $k < $bath_size; ++$k) { 52 | $sub_path = date('Ymd/H'); 53 | 54 | $builder->buildTestFont($img_width, $img_height, $font, 'geZD159'); 55 | 56 | $data = $builder->getCoordinate(); 57 | $font_name = $data[0]['font_name']; 58 | 59 | $data = array_map(function ($word) { 60 | return $word['word'] . '_' . $word['x'] . '#' . $word['y'] . '_' . $word['angle'] . '_' . $word['width'] . '_' . $word['height']; 61 | }, $data); 62 | 63 | $file_name = $sub_path . '/' . $font_name . '@' . implode('.', [$i, $k, $n]) . '.' . implode('~', $data); 64 | $file_name = $save_path . '/' . $file_name . '.jpg'; 65 | 66 | $builder->save($file_name, 90); 67 | 68 | $output->writeln("已生成:{$n}张,当前使用第" . $i . "个字体文件: {$font_name}"); 69 | ++$n; 70 | } 71 | } 72 | } 73 | 74 | /** 75 | * 权重配置 76 | */ 77 | protected function buildWidgetLengthNumber() 78 | { 79 | $data = [ 80 | 1 => 1, 81 | 2 => 1, 82 | 3 => 5, 83 | 4 => 60, 84 | 5 => 18, 85 | 6 => 10, 86 | 7 => 3, 87 | 8 => 1, 88 | 9 => 1, 89 | ]; 90 | 91 | $arr = []; 92 | 93 | foreach ($data as $k => $v) { 94 | for ($n = 0; $n < $v; $n++) { 95 | $arr[] = $k; 96 | } 97 | } 98 | 99 | 100 | return $arr; 101 | } 102 | 103 | protected function getTotalMillisecond() 104 | { 105 | $time = explode(" ", microtime()); 106 | $time = $time [1] . ($time [0] * 1000); 107 | $time2 = explode(".", $time); 108 | $time = $time2 [0]; 109 | 110 | $time_second = substr($time, 0, 10); 111 | $time_micro = substr($time, 10); 112 | 113 | return [ 114 | 'time_second' => $time_second, 115 | 'time_micro' => $time_micro, 116 | ]; 117 | } 118 | } -------------------------------------------------------------------------------- /application/Kernel.php: -------------------------------------------------------------------------------- 1 | addCommands([ 18 | new DefaultCommand(), 19 | new CaptchaGeneratorCommand(), 20 | new TestFontCommand(), 21 | new FormatFontCommand(), 22 | //添加更多的命令 23 | ]); 24 | } 25 | } -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "symfony/console": "^3.3", 4 | "symfony/var-dumper": "^3.3", 5 | "illuminate/filesystem": "^5.5" 6 | }, 7 | "autoload": { 8 | "psr-4": { 9 | "App\\": "application/" 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "f99b7a8c64efb4e71b4cc592df8ab821", 8 | "content-hash": "00c0b2ccc3165b2dbae6363480ef553f", 9 | "packages": [ 10 | { 11 | "name": "doctrine/inflector", 12 | "version": "v1.2.0", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/doctrine/inflector.git", 16 | "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://files.phpcomposer.com/files/doctrine/inflector/e11d84c6e018beedd929cff5220969a3c6d1d462.zip", 21 | "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "php": "^7.0" 26 | }, 27 | "require-dev": { 28 | "phpunit/phpunit": "^6.2" 29 | }, 30 | "type": "library", 31 | "extra": { 32 | "branch-alias": { 33 | "dev-master": "1.2.x-dev" 34 | } 35 | }, 36 | "autoload": { 37 | "psr-4": { 38 | "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" 39 | } 40 | }, 41 | "notification-url": "https://packagist.org/downloads/", 42 | "license": [ 43 | "MIT" 44 | ], 45 | "authors": [ 46 | { 47 | "name": "Roman Borschel", 48 | "email": "roman@code-factory.org" 49 | }, 50 | { 51 | "name": "Benjamin Eberlei", 52 | "email": "kontakt@beberlei.de" 53 | }, 54 | { 55 | "name": "Guilherme Blanco", 56 | "email": "guilhermeblanco@gmail.com" 57 | }, 58 | { 59 | "name": "Jonathan Wage", 60 | "email": "jonwage@gmail.com" 61 | }, 62 | { 63 | "name": "Johannes Schmitt", 64 | "email": "schmittjoh@gmail.com" 65 | } 66 | ], 67 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 68 | "homepage": "http://www.doctrine-project.org", 69 | "keywords": [ 70 | "inflection", 71 | "pluralize", 72 | "singularize", 73 | "string" 74 | ], 75 | "time": "2017-07-22 12:18:28" 76 | }, 77 | { 78 | "name": "illuminate/contracts", 79 | "version": "v5.5.17", 80 | "source": { 81 | "type": "git", 82 | "url": "https://github.com/illuminate/contracts.git", 83 | "reference": "d9e269284eba43bd2e9e8d1f1ba12362b00ec096" 84 | }, 85 | "dist": { 86 | "type": "zip", 87 | "url": "https://files.phpcomposer.com/files/illuminate/contracts/d9e269284eba43bd2e9e8d1f1ba12362b00ec096.zip", 88 | "reference": "d9e269284eba43bd2e9e8d1f1ba12362b00ec096", 89 | "shasum": "" 90 | }, 91 | "require": { 92 | "php": ">=7.0", 93 | "psr/container": "~1.0", 94 | "psr/simple-cache": "~1.0" 95 | }, 96 | "type": "library", 97 | "extra": { 98 | "branch-alias": { 99 | "dev-master": "5.5-dev" 100 | } 101 | }, 102 | "autoload": { 103 | "psr-4": { 104 | "Illuminate\\Contracts\\": "" 105 | } 106 | }, 107 | "notification-url": "https://packagist.org/downloads/", 108 | "license": [ 109 | "MIT" 110 | ], 111 | "authors": [ 112 | { 113 | "name": "Taylor Otwell", 114 | "email": "taylor@laravel.com" 115 | } 116 | ], 117 | "description": "The Illuminate Contracts package.", 118 | "homepage": "https://laravel.com", 119 | "time": "2017-09-19 13:09:37" 120 | }, 121 | { 122 | "name": "illuminate/filesystem", 123 | "version": "v5.5.17", 124 | "source": { 125 | "type": "git", 126 | "url": "https://github.com/illuminate/filesystem.git", 127 | "reference": "9e45ea9a64787455944bca2c6588cf2da085c360" 128 | }, 129 | "dist": { 130 | "type": "zip", 131 | "url": "https://files.phpcomposer.com/files/illuminate/filesystem/9e45ea9a64787455944bca2c6588cf2da085c360.zip", 132 | "reference": "9e45ea9a64787455944bca2c6588cf2da085c360", 133 | "shasum": "" 134 | }, 135 | "require": { 136 | "illuminate/contracts": "5.5.*", 137 | "illuminate/support": "5.5.*", 138 | "php": ">=7.0", 139 | "symfony/finder": "~3.3" 140 | }, 141 | "suggest": { 142 | "league/flysystem": "Required to use the Flysystem local and FTP drivers (~1.0).", 143 | "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", 144 | "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0)." 145 | }, 146 | "type": "library", 147 | "extra": { 148 | "branch-alias": { 149 | "dev-master": "5.5-dev" 150 | } 151 | }, 152 | "autoload": { 153 | "psr-4": { 154 | "Illuminate\\Filesystem\\": "" 155 | } 156 | }, 157 | "notification-url": "https://packagist.org/downloads/", 158 | "license": [ 159 | "MIT" 160 | ], 161 | "authors": [ 162 | { 163 | "name": "Taylor Otwell", 164 | "email": "taylor@laravel.com" 165 | } 166 | ], 167 | "description": "The Illuminate Filesystem package.", 168 | "homepage": "https://laravel.com", 169 | "time": "2017-09-13 13:01:30" 170 | }, 171 | { 172 | "name": "illuminate/support", 173 | "version": "v5.5.17", 174 | "source": { 175 | "type": "git", 176 | "url": "https://github.com/illuminate/support.git", 177 | "reference": "132b06edaab3808f63943004911d58785f164ab4" 178 | }, 179 | "dist": { 180 | "type": "zip", 181 | "url": "https://files.phpcomposer.com/files/illuminate/support/132b06edaab3808f63943004911d58785f164ab4.zip", 182 | "reference": "132b06edaab3808f63943004911d58785f164ab4", 183 | "shasum": "" 184 | }, 185 | "require": { 186 | "doctrine/inflector": "~1.1", 187 | "ext-mbstring": "*", 188 | "illuminate/contracts": "5.5.*", 189 | "nesbot/carbon": "^1.20", 190 | "php": ">=7.0" 191 | }, 192 | "replace": { 193 | "tightenco/collect": "self.version" 194 | }, 195 | "suggest": { 196 | "illuminate/filesystem": "Required to use the composer class (5.2.*).", 197 | "symfony/process": "Required to use the composer class (~3.3).", 198 | "symfony/var-dumper": "Required to use the dd function (~3.3)." 199 | }, 200 | "type": "library", 201 | "extra": { 202 | "branch-alias": { 203 | "dev-master": "5.5-dev" 204 | } 205 | }, 206 | "autoload": { 207 | "psr-4": { 208 | "Illuminate\\Support\\": "" 209 | }, 210 | "files": [ 211 | "helpers.php" 212 | ] 213 | }, 214 | "notification-url": "https://packagist.org/downloads/", 215 | "license": [ 216 | "MIT" 217 | ], 218 | "authors": [ 219 | { 220 | "name": "Taylor Otwell", 221 | "email": "taylor@laravel.com" 222 | } 223 | ], 224 | "description": "The Illuminate Support package.", 225 | "homepage": "https://laravel.com", 226 | "time": "2017-10-17 12:18:29" 227 | }, 228 | { 229 | "name": "nesbot/carbon", 230 | "version": "1.22.1", 231 | "source": { 232 | "type": "git", 233 | "url": "https://github.com/briannesbitt/Carbon.git", 234 | "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc" 235 | }, 236 | "dist": { 237 | "type": "zip", 238 | "url": "https://files.phpcomposer.com/files/briannesbitt/Carbon/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc.zip", 239 | "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", 240 | "shasum": "" 241 | }, 242 | "require": { 243 | "php": ">=5.3.0", 244 | "symfony/translation": "~2.6 || ~3.0" 245 | }, 246 | "require-dev": { 247 | "friendsofphp/php-cs-fixer": "~2", 248 | "phpunit/phpunit": "~4.0 || ~5.0" 249 | }, 250 | "type": "library", 251 | "extra": { 252 | "branch-alias": { 253 | "dev-master": "1.23-dev" 254 | } 255 | }, 256 | "autoload": { 257 | "psr-4": { 258 | "Carbon\\": "src/Carbon/" 259 | } 260 | }, 261 | "notification-url": "https://packagist.org/downloads/", 262 | "license": [ 263 | "MIT" 264 | ], 265 | "authors": [ 266 | { 267 | "name": "Brian Nesbitt", 268 | "email": "brian@nesbot.com", 269 | "homepage": "http://nesbot.com" 270 | } 271 | ], 272 | "description": "A simple API extension for DateTime.", 273 | "homepage": "http://carbon.nesbot.com", 274 | "keywords": [ 275 | "date", 276 | "datetime", 277 | "time" 278 | ], 279 | "time": "2017-01-16 07:55:07" 280 | }, 281 | { 282 | "name": "psr/container", 283 | "version": "1.0.0", 284 | "source": { 285 | "type": "git", 286 | "url": "https://github.com/php-fig/container.git", 287 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 288 | }, 289 | "dist": { 290 | "type": "zip", 291 | "url": "https://files.phpcomposer.com/files/php-fig/container/b7ce3b176482dbbc1245ebf52b181af44c2cf55f.zip", 292 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 293 | "shasum": "" 294 | }, 295 | "require": { 296 | "php": ">=5.3.0" 297 | }, 298 | "type": "library", 299 | "extra": { 300 | "branch-alias": { 301 | "dev-master": "1.0.x-dev" 302 | } 303 | }, 304 | "autoload": { 305 | "psr-4": { 306 | "Psr\\Container\\": "src/" 307 | } 308 | }, 309 | "notification-url": "https://packagist.org/downloads/", 310 | "license": [ 311 | "MIT" 312 | ], 313 | "authors": [ 314 | { 315 | "name": "PHP-FIG", 316 | "homepage": "http://www.php-fig.org/" 317 | } 318 | ], 319 | "description": "Common Container Interface (PHP FIG PSR-11)", 320 | "homepage": "https://github.com/php-fig/container", 321 | "keywords": [ 322 | "PSR-11", 323 | "container", 324 | "container-interface", 325 | "container-interop", 326 | "psr" 327 | ], 328 | "time": "2017-02-14 16:28:37" 329 | }, 330 | { 331 | "name": "psr/log", 332 | "version": "1.0.2", 333 | "source": { 334 | "type": "git", 335 | "url": "https://github.com/php-fig/log.git", 336 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 337 | }, 338 | "dist": { 339 | "type": "zip", 340 | "url": "https://files.phpcomposer.com/files/php-fig/log/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d.zip", 341 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 342 | "shasum": "" 343 | }, 344 | "require": { 345 | "php": ">=5.3.0" 346 | }, 347 | "type": "library", 348 | "extra": { 349 | "branch-alias": { 350 | "dev-master": "1.0.x-dev" 351 | } 352 | }, 353 | "autoload": { 354 | "psr-4": { 355 | "Psr\\Log\\": "Psr/Log/" 356 | } 357 | }, 358 | "notification-url": "https://packagist.org/downloads/", 359 | "license": [ 360 | "MIT" 361 | ], 362 | "authors": [ 363 | { 364 | "name": "PHP-FIG", 365 | "homepage": "http://www.php-fig.org/" 366 | } 367 | ], 368 | "description": "Common interface for logging libraries", 369 | "homepage": "https://github.com/php-fig/log", 370 | "keywords": [ 371 | "log", 372 | "psr", 373 | "psr-3" 374 | ], 375 | "time": "2016-10-10 12:19:37" 376 | }, 377 | { 378 | "name": "psr/simple-cache", 379 | "version": "1.0.0", 380 | "source": { 381 | "type": "git", 382 | "url": "https://github.com/php-fig/simple-cache.git", 383 | "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24" 384 | }, 385 | "dist": { 386 | "type": "zip", 387 | "url": "https://files.phpcomposer.com/files/php-fig/simple-cache/753fa598e8f3b9966c886fe13f370baa45ef0e24.zip", 388 | "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24", 389 | "shasum": "" 390 | }, 391 | "require": { 392 | "php": ">=5.3.0" 393 | }, 394 | "type": "library", 395 | "extra": { 396 | "branch-alias": { 397 | "dev-master": "1.0.x-dev" 398 | } 399 | }, 400 | "autoload": { 401 | "psr-4": { 402 | "Psr\\SimpleCache\\": "src/" 403 | } 404 | }, 405 | "notification-url": "https://packagist.org/downloads/", 406 | "license": [ 407 | "MIT" 408 | ], 409 | "authors": [ 410 | { 411 | "name": "PHP-FIG", 412 | "homepage": "http://www.php-fig.org/" 413 | } 414 | ], 415 | "description": "Common interfaces for simple caching", 416 | "keywords": [ 417 | "cache", 418 | "caching", 419 | "psr", 420 | "psr-16", 421 | "simple-cache" 422 | ], 423 | "time": "2017-01-02 13:31:39" 424 | }, 425 | { 426 | "name": "symfony/console", 427 | "version": "v3.3.13", 428 | "source": { 429 | "type": "git", 430 | "url": "https://github.com/symfony/console.git", 431 | "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805" 432 | }, 433 | "dist": { 434 | "type": "zip", 435 | "url": "https://files.phpcomposer.com/files/symfony/console/63cd7960a0a522c3537f6326706d7f3b8de65805.zip", 436 | "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805", 437 | "shasum": "" 438 | }, 439 | "require": { 440 | "php": "^5.5.9|>=7.0.8", 441 | "symfony/debug": "~2.8|~3.0", 442 | "symfony/polyfill-mbstring": "~1.0" 443 | }, 444 | "conflict": { 445 | "symfony/dependency-injection": "<3.3" 446 | }, 447 | "require-dev": { 448 | "psr/log": "~1.0", 449 | "symfony/config": "~3.3", 450 | "symfony/dependency-injection": "~3.3", 451 | "symfony/event-dispatcher": "~2.8|~3.0", 452 | "symfony/filesystem": "~2.8|~3.0", 453 | "symfony/process": "~2.8|~3.0" 454 | }, 455 | "suggest": { 456 | "psr/log": "For using the console logger", 457 | "symfony/event-dispatcher": "", 458 | "symfony/filesystem": "", 459 | "symfony/process": "" 460 | }, 461 | "type": "library", 462 | "extra": { 463 | "branch-alias": { 464 | "dev-master": "3.3-dev" 465 | } 466 | }, 467 | "autoload": { 468 | "psr-4": { 469 | "Symfony\\Component\\Console\\": "" 470 | }, 471 | "exclude-from-classmap": [ 472 | "/Tests/" 473 | ] 474 | }, 475 | "notification-url": "https://packagist.org/downloads/", 476 | "license": [ 477 | "MIT" 478 | ], 479 | "authors": [ 480 | { 481 | "name": "Fabien Potencier", 482 | "email": "fabien@symfony.com" 483 | }, 484 | { 485 | "name": "Symfony Community", 486 | "homepage": "https://symfony.com/contributors" 487 | } 488 | ], 489 | "description": "Symfony Console Component", 490 | "homepage": "https://symfony.com", 491 | "time": "2017-11-16 15:24:32" 492 | }, 493 | { 494 | "name": "symfony/debug", 495 | "version": "v3.3.13", 496 | "source": { 497 | "type": "git", 498 | "url": "https://github.com/symfony/debug.git", 499 | "reference": "74557880e2846b5c84029faa96b834da37e29810" 500 | }, 501 | "dist": { 502 | "type": "zip", 503 | "url": "https://files.phpcomposer.com/files/symfony/debug/74557880e2846b5c84029faa96b834da37e29810.zip", 504 | "reference": "74557880e2846b5c84029faa96b834da37e29810", 505 | "shasum": "" 506 | }, 507 | "require": { 508 | "php": "^5.5.9|>=7.0.8", 509 | "psr/log": "~1.0" 510 | }, 511 | "conflict": { 512 | "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" 513 | }, 514 | "require-dev": { 515 | "symfony/http-kernel": "~2.8|~3.0" 516 | }, 517 | "type": "library", 518 | "extra": { 519 | "branch-alias": { 520 | "dev-master": "3.3-dev" 521 | } 522 | }, 523 | "autoload": { 524 | "psr-4": { 525 | "Symfony\\Component\\Debug\\": "" 526 | }, 527 | "exclude-from-classmap": [ 528 | "/Tests/" 529 | ] 530 | }, 531 | "notification-url": "https://packagist.org/downloads/", 532 | "license": [ 533 | "MIT" 534 | ], 535 | "authors": [ 536 | { 537 | "name": "Fabien Potencier", 538 | "email": "fabien@symfony.com" 539 | }, 540 | { 541 | "name": "Symfony Community", 542 | "homepage": "https://symfony.com/contributors" 543 | } 544 | ], 545 | "description": "Symfony Debug Component", 546 | "homepage": "https://symfony.com", 547 | "time": "2017-11-10 16:38:39" 548 | }, 549 | { 550 | "name": "symfony/finder", 551 | "version": "v3.3.13", 552 | "source": { 553 | "type": "git", 554 | "url": "https://github.com/symfony/finder.git", 555 | "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880" 556 | }, 557 | "dist": { 558 | "type": "zip", 559 | "url": "https://files.phpcomposer.com/files/symfony/finder/138af5ec075d4b1d1bd19de08c38a34bb2d7d880.zip", 560 | "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880", 561 | "shasum": "" 562 | }, 563 | "require": { 564 | "php": "^5.5.9|>=7.0.8" 565 | }, 566 | "type": "library", 567 | "extra": { 568 | "branch-alias": { 569 | "dev-master": "3.3-dev" 570 | } 571 | }, 572 | "autoload": { 573 | "psr-4": { 574 | "Symfony\\Component\\Finder\\": "" 575 | }, 576 | "exclude-from-classmap": [ 577 | "/Tests/" 578 | ] 579 | }, 580 | "notification-url": "https://packagist.org/downloads/", 581 | "license": [ 582 | "MIT" 583 | ], 584 | "authors": [ 585 | { 586 | "name": "Fabien Potencier", 587 | "email": "fabien@symfony.com" 588 | }, 589 | { 590 | "name": "Symfony Community", 591 | "homepage": "https://symfony.com/contributors" 592 | } 593 | ], 594 | "description": "Symfony Finder Component", 595 | "homepage": "https://symfony.com", 596 | "time": "2017-11-05 15:47:03" 597 | }, 598 | { 599 | "name": "symfony/polyfill-mbstring", 600 | "version": "v1.6.0", 601 | "source": { 602 | "type": "git", 603 | "url": "https://github.com/symfony/polyfill-mbstring.git", 604 | "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" 605 | }, 606 | "dist": { 607 | "type": "zip", 608 | "url": "https://files.phpcomposer.com/files/symfony/polyfill-mbstring/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296.zip", 609 | "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", 610 | "shasum": "" 611 | }, 612 | "require": { 613 | "php": ">=5.3.3" 614 | }, 615 | "suggest": { 616 | "ext-mbstring": "For best performance" 617 | }, 618 | "type": "library", 619 | "extra": { 620 | "branch-alias": { 621 | "dev-master": "1.6-dev" 622 | } 623 | }, 624 | "autoload": { 625 | "psr-4": { 626 | "Symfony\\Polyfill\\Mbstring\\": "" 627 | }, 628 | "files": [ 629 | "bootstrap.php" 630 | ] 631 | }, 632 | "notification-url": "https://packagist.org/downloads/", 633 | "license": [ 634 | "MIT" 635 | ], 636 | "authors": [ 637 | { 638 | "name": "Nicolas Grekas", 639 | "email": "p@tchwork.com" 640 | }, 641 | { 642 | "name": "Symfony Community", 643 | "homepage": "https://symfony.com/contributors" 644 | } 645 | ], 646 | "description": "Symfony polyfill for the Mbstring extension", 647 | "homepage": "https://symfony.com", 648 | "keywords": [ 649 | "compatibility", 650 | "mbstring", 651 | "polyfill", 652 | "portable", 653 | "shim" 654 | ], 655 | "time": "2017-10-11 12:05:26" 656 | }, 657 | { 658 | "name": "symfony/translation", 659 | "version": "v3.3.13", 660 | "source": { 661 | "type": "git", 662 | "url": "https://github.com/symfony/translation.git", 663 | "reference": "373e553477e55cd08f8b86b74db766c75b987fdb" 664 | }, 665 | "dist": { 666 | "type": "zip", 667 | "url": "https://files.phpcomposer.com/files/symfony/translation/373e553477e55cd08f8b86b74db766c75b987fdb.zip", 668 | "reference": "373e553477e55cd08f8b86b74db766c75b987fdb", 669 | "shasum": "" 670 | }, 671 | "require": { 672 | "php": "^5.5.9|>=7.0.8", 673 | "symfony/polyfill-mbstring": "~1.0" 674 | }, 675 | "conflict": { 676 | "symfony/config": "<2.8", 677 | "symfony/yaml": "<3.3" 678 | }, 679 | "require-dev": { 680 | "psr/log": "~1.0", 681 | "symfony/config": "~2.8|~3.0", 682 | "symfony/intl": "^2.8.18|^3.2.5", 683 | "symfony/yaml": "~3.3" 684 | }, 685 | "suggest": { 686 | "psr/log": "To use logging capability in translator", 687 | "symfony/config": "", 688 | "symfony/yaml": "" 689 | }, 690 | "type": "library", 691 | "extra": { 692 | "branch-alias": { 693 | "dev-master": "3.3-dev" 694 | } 695 | }, 696 | "autoload": { 697 | "psr-4": { 698 | "Symfony\\Component\\Translation\\": "" 699 | }, 700 | "exclude-from-classmap": [ 701 | "/Tests/" 702 | ] 703 | }, 704 | "notification-url": "https://packagist.org/downloads/", 705 | "license": [ 706 | "MIT" 707 | ], 708 | "authors": [ 709 | { 710 | "name": "Fabien Potencier", 711 | "email": "fabien@symfony.com" 712 | }, 713 | { 714 | "name": "Symfony Community", 715 | "homepage": "https://symfony.com/contributors" 716 | } 717 | ], 718 | "description": "Symfony Translation Component", 719 | "homepage": "https://symfony.com", 720 | "time": "2017-11-07 14:12:55" 721 | }, 722 | { 723 | "name": "symfony/var-dumper", 724 | "version": "v3.3.13", 725 | "source": { 726 | "type": "git", 727 | "url": "https://github.com/symfony/var-dumper.git", 728 | "reference": "805de6bd6869073e60610df1b14ab7d969c61b01" 729 | }, 730 | "dist": { 731 | "type": "zip", 732 | "url": "https://files.phpcomposer.com/files/symfony/var-dumper/805de6bd6869073e60610df1b14ab7d969c61b01.zip", 733 | "reference": "805de6bd6869073e60610df1b14ab7d969c61b01", 734 | "shasum": "" 735 | }, 736 | "require": { 737 | "php": "^5.5.9|>=7.0.8", 738 | "symfony/polyfill-mbstring": "~1.0" 739 | }, 740 | "conflict": { 741 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" 742 | }, 743 | "require-dev": { 744 | "ext-iconv": "*", 745 | "twig/twig": "~1.34|~2.4" 746 | }, 747 | "suggest": { 748 | "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", 749 | "ext-symfony_debug": "" 750 | }, 751 | "type": "library", 752 | "extra": { 753 | "branch-alias": { 754 | "dev-master": "3.3-dev" 755 | } 756 | }, 757 | "autoload": { 758 | "files": [ 759 | "Resources/functions/dump.php" 760 | ], 761 | "psr-4": { 762 | "Symfony\\Component\\VarDumper\\": "" 763 | }, 764 | "exclude-from-classmap": [ 765 | "/Tests/" 766 | ] 767 | }, 768 | "notification-url": "https://packagist.org/downloads/", 769 | "license": [ 770 | "MIT" 771 | ], 772 | "authors": [ 773 | { 774 | "name": "Nicolas Grekas", 775 | "email": "p@tchwork.com" 776 | }, 777 | { 778 | "name": "Symfony Community", 779 | "homepage": "https://symfony.com/contributors" 780 | } 781 | ], 782 | "description": "Symfony mechanism for exploring and dumping PHP variables", 783 | "homepage": "https://symfony.com", 784 | "keywords": [ 785 | "debug", 786 | "dump" 787 | ], 788 | "time": "2017-11-07 14:16:22" 789 | } 790 | ], 791 | "packages-dev": [], 792 | "aliases": [], 793 | "minimum-stability": "stable", 794 | "stability-flags": [], 795 | "prefer-stable": false, 796 | "prefer-lowest": false, 797 | "platform": [], 798 | "platform-dev": [] 799 | } 800 | -------------------------------------------------------------------------------- /data/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/walijoy/captcha-generator/fe0ce6d630376c5e61fed764969402e640f4abab/demo.png -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ## 深度学习样本数据生成器:验证码样本数据生成 2 | 支持无限字体和无限背景图片,生成的图片可以随机扭曲,随机长度 3 | 4 | 生成的文件名称表示了该图片中的内容、每个字母所在坐标、旋转角度、宽度高度等 5 | 6 | 7 | ## 资源目录 8 | 将下载回来的字体放到application/Assets/fonts目录中 9 | 10 | 将下载回来的背景图片放到application/Assets/backgrounds目录中 11 | 12 | 13 | ## 代码依赖安装 14 | composer install 15 | 16 | 17 | ## 关键备注(本脚本最大的价值在这里) 18 | 本代码开发测试字体下载自http://font.chinaz.com,已人工挑选出错误字体,并做相应处理(一共2万多种字体,处理后有效字体有1万多种)。 19 | 20 | 若使用本工具生成图片,建议批量下载来自font.chinaz.com的字体并解压,将所有字体放入资源文件夹中并执行: 21 | 22 | php app command:captcha-format-font 23 | 24 | 这将删除无效字体,并对只能显示单英文/数字的字体进行分类处理,若自己确认没有问题的字体可以直接放到资源目录,而不必使用以上命令操作 25 | 26 | 27 | ## 执行命令 28 | php app command:captcha-generator 29 | 30 | 参数: 31 | save-path 生成的图片保存目录 [default: "./data"] 32 | bath-size 每个字体生成多少张图片 [default: 100] 33 | font-number 第n个字体文件 [default: 0] 34 | font-end 第n个字体文件结束 [default: 0] 35 | img-width 图片宽度 [default: 300] 36 | img-height 图片宽度 [default: 150] 37 | 38 | 如: 39 | 40 | ➜ captcha-generator git:(master) php app command:captcha-generator ./data 2 41 | "共0张背景图片,11个字体文件。" 42 | 已生成:1张,当前使用第0个字体文件 43 | 10/22 [▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░] 45% 已生成:11张,当前使用第5个字体文件 44 | 20/22 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░] 90% 已生成:21张,当前使用第10个字体文件 45 | 22/22 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%% 46 | 47 | ## 生成的图片文件名释义 48 | 49 | 10.4.1.k_9#119_24_48_101~O_86#123_-3_60_89~e_151#115_-13_59_74~G_223#114_-6_60_93@+font_10201.jpg 50 | 51 | 10.4.1. (本次生成第10张图片.第5个字体,第5个字体生成出来的第2张图片) 52 | k_9#119_24_48_101 (图片上顺序第一个字符是小写的k_左下角x坐标值为9#y坐标值为119_文字旋转角度为24_文字宽度为48_文字高度为101) 53 | ~ (分隔每个字符) 54 | O_86#123_-3_60_89 55 | ~ 56 | e_151#115_-13_59_74 57 | ~ 58 | G_223#114_-6_60_93 59 | @ 60 | +font_10201.jpg (这张图片使用的字符的文件名称) 61 | 62 | 63 | 64 | ![](demo.png) 65 | --------------------------------------------------------------------------------