CI验证码函数修改及调用方法
2015-11-30 10:28
435 查看
不在本地创建图片文件,直接显示,代码如下
\application\helpers\MY_captcha_helper.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
if ( ! function_exists('create_captcha'))
{
function create_captcha($data = '', $img_path = '', $img_url = '', $font_path = '')
{
$defaults = array(
'word'
=> '',
'img_path'
=> '',
'img_url'
=> '',
'img_width'
=> '150',
'img_height'
=> '30',
'font_path'
=> '',
'expiration'
=> 7200,
'word_length'
=> 8,
'font_size'
=> 16,
'img_id'
=> '',
'pool'
=> '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'colors'
=> array(
'background'
=> array(255,255,255),
'border'
=> array(153,102,102),
'text'
=> array(204,153,153),
'grid'
=> array(255,182,182)
)
);
foreach ($defaults as $key => $val)
{
if ( ! is_array($data) && empty($$key))
{
$$key = $val;
}
else
{
$$key = isset($data[$key]) ? $data[$key] : $val;
}
}
/*if ($img_path === '' OR $img_url === ''
OR ! is_dir($img_path) OR ! is_really_writable($img_path)
OR ! extension_loaded('gd'))
{
return FALSE;
}*/
// -----------------------------------
// Remove old images
// -----------------------------------
/*$now = microtime(TRUE);
$current_dir = @opendir($img_path);
while ($filename = @readdir($current_dir))
{
if (substr($filename, -4) === '.jpg' && (str_replace('.jpg', '', $filename) + $expiration) < $now)
{
@unlink($img_path.$filename);
}
}
@closedir($current_dir);*/
// -----------------------------------
// Do we have a "word" yet?
// -----------------------------------
/*if (empty($word))
{
$word = '';
for ($i = 0, $mt_rand_max = strlen($pool) - 1; $i < $word_length; $i++)
{
$word .= $pool[mt_rand(0, $mt_rand_max)];
}
}
elseif ( ! is_string($word))
{
$word = (string) $word;
}*/
// -----------------------------------
// Determine angle and position
// -----------------------------------
$length
= strlen($word);
$angle
= ($length >= 6) ? mt_rand(-($length-6), ($length-6)) : 0;
$x_axis
= mt_rand(6, (360/$length)-16);
$y_axis = ($angle >= 0) ? mt_rand($img_height, $img_width) : mt_rand(6, $img_height);
// Create image
// PHP.net recommends imagecreatetruecolor(), but it isn't always available
$im = function_exists('imagecreatetruecolor')
? imagecreatetruecolor($img_width, $img_height)
: imagecreate($img_width, $img_height);
// -----------------------------------
// Assign colors
// ----------------------------------
is_array($colors) OR $colors = $defaults['colors'];
foreach (array_keys($defaults['colors']) as $key)
{
// Check for a possible missing value
is_array($colors[$key]) OR $colors[$key] = $defaults['colors'][$key];
$colors[$key] = imagecolorallocate($im, $colors[$key][0], $colors[$key][1], $colors[$key][2]);
}
// Create the rectangle
ImageFilledRectangle($im, 0, 0, $img_width, $img_height, $colors['background']);
// -----------------------------------
// Create the spiral pattern
// -----------------------------------
$theta
= 1;
$thetac
= 7;
$radius
= 16;
$circles
= 20;
$points
= 32;
for ($i = 0, $cp = ($circles * $points) - 1; $i < $cp; $i++)
{
$theta += $thetac;
$rad = $radius * ($i / $points);
$x = ($rad * cos($theta)) + $x_axis;
$y = ($rad * sin($theta)) + $y_axis;
$theta += $thetac;
$rad1 = $radius * (($i + 1) / $points);
$x1 = ($rad1 * cos($theta)) + $x_axis;
$y1 = ($rad1 * sin($theta)) + $y_axis;
imageline($im, $x, $y, $x1, $y1, $colors['grid']);
$theta -= $thetac;
}
// -----------------------------------
// Write the text
// -----------------------------------
$use_font = ($font_path !== '' && file_exists($font_path) && function_exists('imagettftext'));
if ($use_font === FALSE)
{
($font_size > 5) && $font_size = 5;
$x = mt_rand(0, $img_width / ($length / 3));
$y = 0;
}
else
{
($font_size > 30) && $font_size = 30;
$x = mt_rand(0, $img_width / ($length / 1.5));
$y = $font_size + 2;
}
for ($i = 0; $i < $length; $i++)
{
if ($use_font === FALSE)
{
$y = mt_rand(0 , $img_height / 2);
imagestring($im, $font_size, $x, $y, $word[$i], $colors['text']);
$x += ($font_size * 2);
}
else
{
$y = mt_rand($img_height / 2, $img_height - 3);
imagettftext($im, $font_size, $angle, $x, $y, $colors['text'], $font_path, $word[$i]);
$x += $font_size;
}
}
// Create the border
imagerectangle($im, 0, 0, $img_width - 1, $img_height - 1, $colors['border']);
// -----------------------------------
// Generate the image
// -----------------------------------
/* $img_url = rtrim($img_url, '/').'/';
if (function_exists('imagejpeg'))
{
$img_filename = $now.'.jpg';
imagejpeg($im, $img_path.$img_filename);
}
elseif (function_exists('imagepng'))
{
$img_filename = $now.'.png';
imagepng($im, $img_path.$img_filename);
}
else
{
return FALSE;
}
$img = '<img '.($img_id === '' ? '' : 'id="'.$img_id.'"').' src="'.$img_url.$img_filename.'" style="width: '.$img_width.'; height: '.$img_height .'; border: 0;" alt=" " />';*/
header("Content-Type:image/jpeg");
imagejpeg($im);
//ImageDestroy($im);
return array('word' => $word);
//return array('word' => $word, 'time' => $now, 'image' => $img, 'filename' => $img_filename);
}
}
Controller层
public function cap(){
$rand = strtoupper(substr(rand(),0,4));
$user = array('rand'=>$rand);
$this->session->set_userdata($user);
$vals = array(
'word'
=> $rand,
'img_width' => '100',
'img_height' => 24,
'expiration' => 10,
'word_length'
=> 4,
);
echo create_captcha($vals);
}
views层
<img src="<?php echo site_url('user/cap');?>" onclick= this.src="<?php echo site_url('user/cap').'/'?>"+Math.random() style="cursor: pointer;" title="看不清?点击更换另一个验证码。" />
\application\helpers\MY_captcha_helper.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
if ( ! function_exists('create_captcha'))
{
function create_captcha($data = '', $img_path = '', $img_url = '', $font_path = '')
{
$defaults = array(
'word'
=> '',
'img_path'
=> '',
'img_url'
=> '',
'img_width'
=> '150',
'img_height'
=> '30',
'font_path'
=> '',
'expiration'
=> 7200,
'word_length'
=> 8,
'font_size'
=> 16,
'img_id'
=> '',
'pool'
=> '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
'colors'
=> array(
'background'
=> array(255,255,255),
'border'
=> array(153,102,102),
'text'
=> array(204,153,153),
'grid'
=> array(255,182,182)
)
);
foreach ($defaults as $key => $val)
{
if ( ! is_array($data) && empty($$key))
{
$$key = $val;
}
else
{
$$key = isset($data[$key]) ? $data[$key] : $val;
}
}
/*if ($img_path === '' OR $img_url === ''
OR ! is_dir($img_path) OR ! is_really_writable($img_path)
OR ! extension_loaded('gd'))
{
return FALSE;
}*/
// -----------------------------------
// Remove old images
// -----------------------------------
/*$now = microtime(TRUE);
$current_dir = @opendir($img_path);
while ($filename = @readdir($current_dir))
{
if (substr($filename, -4) === '.jpg' && (str_replace('.jpg', '', $filename) + $expiration) < $now)
{
@unlink($img_path.$filename);
}
}
@closedir($current_dir);*/
// -----------------------------------
// Do we have a "word" yet?
// -----------------------------------
/*if (empty($word))
{
$word = '';
for ($i = 0, $mt_rand_max = strlen($pool) - 1; $i < $word_length; $i++)
{
$word .= $pool[mt_rand(0, $mt_rand_max)];
}
}
elseif ( ! is_string($word))
{
$word = (string) $word;
}*/
// -----------------------------------
// Determine angle and position
// -----------------------------------
$length
= strlen($word);
$angle
= ($length >= 6) ? mt_rand(-($length-6), ($length-6)) : 0;
$x_axis
= mt_rand(6, (360/$length)-16);
$y_axis = ($angle >= 0) ? mt_rand($img_height, $img_width) : mt_rand(6, $img_height);
// Create image
// PHP.net recommends imagecreatetruecolor(), but it isn't always available
$im = function_exists('imagecreatetruecolor')
? imagecreatetruecolor($img_width, $img_height)
: imagecreate($img_width, $img_height);
// -----------------------------------
// Assign colors
// ----------------------------------
is_array($colors) OR $colors = $defaults['colors'];
foreach (array_keys($defaults['colors']) as $key)
{
// Check for a possible missing value
is_array($colors[$key]) OR $colors[$key] = $defaults['colors'][$key];
$colors[$key] = imagecolorallocate($im, $colors[$key][0], $colors[$key][1], $colors[$key][2]);
}
// Create the rectangle
ImageFilledRectangle($im, 0, 0, $img_width, $img_height, $colors['background']);
// -----------------------------------
// Create the spiral pattern
// -----------------------------------
$theta
= 1;
$thetac
= 7;
$radius
= 16;
$circles
= 20;
$points
= 32;
for ($i = 0, $cp = ($circles * $points) - 1; $i < $cp; $i++)
{
$theta += $thetac;
$rad = $radius * ($i / $points);
$x = ($rad * cos($theta)) + $x_axis;
$y = ($rad * sin($theta)) + $y_axis;
$theta += $thetac;
$rad1 = $radius * (($i + 1) / $points);
$x1 = ($rad1 * cos($theta)) + $x_axis;
$y1 = ($rad1 * sin($theta)) + $y_axis;
imageline($im, $x, $y, $x1, $y1, $colors['grid']);
$theta -= $thetac;
}
// -----------------------------------
// Write the text
// -----------------------------------
$use_font = ($font_path !== '' && file_exists($font_path) && function_exists('imagettftext'));
if ($use_font === FALSE)
{
($font_size > 5) && $font_size = 5;
$x = mt_rand(0, $img_width / ($length / 3));
$y = 0;
}
else
{
($font_size > 30) && $font_size = 30;
$x = mt_rand(0, $img_width / ($length / 1.5));
$y = $font_size + 2;
}
for ($i = 0; $i < $length; $i++)
{
if ($use_font === FALSE)
{
$y = mt_rand(0 , $img_height / 2);
imagestring($im, $font_size, $x, $y, $word[$i], $colors['text']);
$x += ($font_size * 2);
}
else
{
$y = mt_rand($img_height / 2, $img_height - 3);
imagettftext($im, $font_size, $angle, $x, $y, $colors['text'], $font_path, $word[$i]);
$x += $font_size;
}
}
// Create the border
imagerectangle($im, 0, 0, $img_width - 1, $img_height - 1, $colors['border']);
// -----------------------------------
// Generate the image
// -----------------------------------
/* $img_url = rtrim($img_url, '/').'/';
if (function_exists('imagejpeg'))
{
$img_filename = $now.'.jpg';
imagejpeg($im, $img_path.$img_filename);
}
elseif (function_exists('imagepng'))
{
$img_filename = $now.'.png';
imagepng($im, $img_path.$img_filename);
}
else
{
return FALSE;
}
$img = '<img '.($img_id === '' ? '' : 'id="'.$img_id.'"').' src="'.$img_url.$img_filename.'" style="width: '.$img_width.'; height: '.$img_height .'; border: 0;" alt=" " />';*/
header("Content-Type:image/jpeg");
imagejpeg($im);
//ImageDestroy($im);
return array('word' => $word);
//return array('word' => $word, 'time' => $now, 'image' => $img, 'filename' => $img_filename);
}
}
Controller层
public function cap(){
$rand = strtoupper(substr(rand(),0,4));
$user = array('rand'=>$rand);
$this->session->set_userdata($user);
$vals = array(
'word'
=> $rand,
'img_width' => '100',
'img_height' => 24,
'expiration' => 10,
'word_length'
=> 4,
);
echo create_captcha($vals);
}
views层
<img src="<?php echo site_url('user/cap');?>" onclick= this.src="<?php echo site_url('user/cap').'/'?>"+Math.random() style="cursor: pointer;" title="看不清?点击更换另一个验证码。" />
相关文章推荐
- 列表视图(ListView)和ListActivity——ArrayAdapter
- AOL search
- 十一月份英语学习总结—积累
- 【django】搭建博客教程(3)——markdown以及highlight
- MSDN-Abstract Data Models
- 【Java并发编程实战】—–“J.U.C”:Semaphore
- JVM之类加载器(ClassLoader)基本介绍
- android 百度地图开发
- Bootstrap打印问题
- C#实现函数默认值和C#4.0实现默认值
- 向Maven的本地库中添加jar文件
- altium designer应用技巧---cyclone IV代芯片底部焊盘问题
- 常见排序算法(下)
- 全球域名商解析新增保有量15强:爱名网落榜
- Android WebView使用
- Linux高精确的时序(sleep, usleep,nanosleep)
- Swift 类构造器的使用
- python 学习笔记(相似性计算方法)
- android将Bitmap转换成文件
- 【Java并发编程实战】—–“J.U.C”:Condition