|
- <?php
-
- /**
- * 验证图片
- *
- * @version $Id: vdimgck.php$
- * @package DedeCMS.Libraries
- * @copyright Copyright (c) 2020, DedeBIZ.COM
- * @license https://www.dedebiz.com/license
- * @link https://www.dedebiz.com
- */
- require_once(dirname(__FILE__) . '/../include/common.inc.php');
- require_once(DEDEDATA . '/safe/inc_safe_config.php');
- require_once(DEDEDATA . '/config.cache.inc.php');
- $config = array(
- 'font_size' => 20,
- 'img_height' => $safe_wheight,
- 'word_type' => (int)$safe_codetype, // 1:数字 2:英文 3:单词
- 'img_width' => $safe_wwidth,
- 'use_boder' => TRUE,
- 'font_file' => DEDEINC . '/data/fonts/' . mt_rand(1, 6) . '.ttf',
- 'wordlist_file' => DEDEINC . '/data/words/words.txt',
- 'filter_type' => 5
- );
-
- $enkey = substr(md5(substr($cfg_cookie_encode, 0, 5)), 0, 10);
- $sessSavePath = DEDEDATA . "/sessions_{$enkey}";
- if (!is_dir($sessSavePath)) mkdir($sessSavePath);
-
- // Session保存路径
-
- if (is_writeable($sessSavePath) && is_readable($sessSavePath)) {
- session_save_path($sessSavePath);
- }
- if (!empty($cfg_domain_cookie)) session_set_cookie_params(0, '/', $cfg_domain_cookie);
-
- if (!echo_validate_image($config)) {
- // 如果不成功则初始化一个默认验证码
- @session_start();
- $_SESSION['securimage_code_value'] = strtolower('abcd');
- if (function_exists('imagecreatefromjpeg')) {
- $im = @imagecreatefromjpeg(DEDEINC . '/data/vdcode.jpg');
- header("Pragma:no-cache\r\n");
- header("Cache-Control:no-cache\r\n");
- header("Expires:0\r\n");
- imagejpeg($im);
- imagedestroy($im);
- } else {
- header("Pragma:no-cache\r\n");
- header("Cache-Control:no-cache\r\n");
- header("Expires:0\r\n");
- $c = file_get_contents(DEDEINC . '/data/vdcode.jpg', true);
- $size = filesize(DEDEINC . '/data/vdcode.jpg');
- header('Content-Type: image/x-icon');
- header("Content-length: $size");
- echo $c;
- }
- }
-
- function echo_validate_image($config = array())
- {
- @session_start();
-
- if (!function_exists('imagettftext')) {
- return false;
- }
-
- //主要参数
- $font_size = isset($config['font_size']) ? $config['font_size'] : 14;
- $img_height = isset($config['img_height']) ? $config['img_height'] : 38;
- $img_width = isset($config['img_width']) ? $config['img_width'] : 68;
- $font_file = isset($config['font_file']) ? $config['font_file'] : DEDEINC . '/data/font/' . mt_rand(1, 6) . '.ttf';
- $use_boder = isset($config['use_boder']) ? $config['use_boder'] : TRUE;
- $filter_type = isset($config['filter_type']) ? $config['filter_type'] : 0;
-
- //创建图片,并设置背景色
- $im = @imagecreate($img_width, $img_height);
-
- imagecolorallocate($im, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
-
- //文字随机颜色
- $fontColor[] = imagecolorallocate($im, 0x15, 0x15, 0x15);
- $fontColor[] = imagecolorallocate($im, 0x95, 0x1e, 0x04);
- $fontColor[] = imagecolorallocate($im, 0x93, 0x14, 0xa9);
- $fontColor[] = imagecolorallocate($im, 0x12, 0x81, 0x0a);
- $fontColor[] = imagecolorallocate($im, 0x06, 0x3a, 0xd5);
-
- //获取随机字符
- $rndstring = '';
- if ($config['word_type'] != 3) {
- for ($i = 0; $i < 4; $i++) {
- if ($config['word_type'] == 1) {
- $c = chr(mt_rand(48, 57));
- } else if ($config['word_type'] == 2) {
- $c = chr(mt_rand(65, 90));
- if ($c == 'I') $c = 'P';
- if ($c == 'O') $c = 'N';
- }
- $rndstring .= $c;
- }
- } else {
- $chars = 'abcdefghigklmnopqrstuvwxwyABCDEFGHIGKLMNOPQRSTUVWXWY0123456789';
- $rndstring = '';
- $length = rand(4, 4);
- $max = strlen($chars) - 1;
- for ($i = 0; $i < $length; $i++) {
- $rndstring .= $chars[mt_rand(0, $max)];
- }
- }
-
- $_SESSION['securimage_code_value'] = strtolower($rndstring);
-
- $rndcodelen = strlen($rndstring);
-
- // //背景横线
- // $lineColor1 = imagecolorallocate($im, 0xda, 0xd9, 0xd1);
- // for ($j = 3; $j <= $img_height - 3; $j = $j + 3) {
- // imageline($im, 2, $j, $img_width - 2, $j, $lineColor1);
- // }
-
- // //背景竖线
- // $lineColor2 = imagecolorallocate($im, 0xda, 0xd9, 0xd1);
- // for ($j = 2; $j < 100; $j = $j + 6) {
- // imageline($im, $j, 0, $j + 8, $img_height, $lineColor2);
- // }
-
- // 增加一些噪线
- for ($i=0; $i < 5; $i++) {
- $red = mt_rand(50, 255);
- $green = mt_rand(50, 255);
- $blue = mt_rand(50, 255);
- $tcol = imagecolorallocate($im, $red, $green, $blue);
- if (mt_rand(0, 1)) { // Horizontal
- $Xa = mt_rand(0, $img_width/2);
- $Ya = mt_rand(0, $img_height);
- $Xb = mt_rand($img_width/2, $img_width);
- $Yb = mt_rand(0, $img_height);
- } else { // Vertical
- $Xa = mt_rand(0, $img_width);
- $Ya = mt_rand(0, $img_height/2);
- $Xb = mt_rand(0, $img_width);
- $Yb = mt_rand($img_height/2, $img_height);
- }
- imagesetthickness($im, mt_rand(1, 3));
- imageline($im, $Xa, $Ya, $Xb, $Yb, $tcol);
- }
-
-
- //画边框
- if ($use_boder && $filter_type == 0) {
- $bordercolor = imagecolorallocate($im, 0x9d, 0x9e, 0x96);
- imagerectangle($im, 0, 0, $img_width - 1, $img_height - 1, $bordercolor);
- }
-
- //输出文字
- $lastc = '';
- for ($i = 0; $i < $rndcodelen; $i++) {
- $rndstring[$i] = strtoupper($rndstring[$i]);
- $c_fontColor = $fontColor[mt_rand(0, 4)];
- $y_pos = $i == 0 ? 4 : $i * ($font_size + 2);
- $c = mt_rand(10, 30);
- @imagettftext($im, $font_size, $c, $y_pos, 28, $c_fontColor, $font_file, $rndstring[$i]);
- $lastc = $rndstring[$i];
- }
-
- //图象效果
- switch ($filter_type) {
- case 1:
- imagefilter($im, IMG_FILTER_NEGATE);
- break;
- case 2:
- imagefilter($im, IMG_FILTER_EMBOSS);
- break;
- case 3:
- imagefilter($im, IMG_FILTER_EDGEDETECT);
- break;
- default:
- break;
- }
-
- header("Pragma:no-cache\r\n");
- header("Cache-Control:no-cache\r\n");
- header("Expires:0\r\n");
-
- //输出特定类型的图片格式,优先级为 gif -> jpg ->png
- //dump(function_exists("imagejpeg"));
-
- if (function_exists("imagejpeg")) {
- header("content-type:image/jpeg\r\n");
- imagejpeg($im);
- } else {
- header("content-type:image/png\r\n");
- imagepng($im);
- }
- imagedestroy($im);
- exit();
- }
|