├── .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 | 
65 |
--------------------------------------------------------------------------------