this seems duplace question how, not. asking following :
does codeingiter helper have font size increasing feature ? if passed following array setting seems not change.
'font_size' => 36
2.the font used has following font sizes , still no change captcah size
so matter ?
/* setup config pass create_captcha function */ $capache_config = array( 'img_path' => 'captcha/', 'img_url' => base_url() . 'captcha/', 'img_width' => '150', 'font_path' => base_url() . 'captcha/font/captcha4.ttf', 'img_height' => 40, 'expiration' => 7200 ); /* generate captcha */ $captcha = create_captcha($capache_config);
but size can't larger if increased width or height ? thing know ?
codeigniter captcha helper doesn't allow change font size. following replace default create_captcha
function , allow change font size. codeigniter version have used 2.2.0. working/tested code.
step 1: create new helper file named my_captcha_helper.php
, save under @ root of codeigniter folder in application/helper
. content of file:
<?php if ( ! defined('basepath')) exit('no direct script access allowed'); /** * codeigniter * * open source application development framework php 5.1.6 or newer * * @package codeigniter * @author expressionengine dev team * @copyright copyright (c) 2008 - 2014, ellislab, inc. * @license http://codeigniter.com/user_guide/license.html * @link http://codeigniter.com * @since version 1.0 * @filesource */ // ------------------------------------------------------------------------ /** * codeigniter captcha helper * * @package codeigniter * @subpackage helpers * @category helpers * @author expressionengine dev team * @link http://codeigniter.com/user_guide/helpers/xml_helper.html */ // ------------------------------------------------------------------------ /** * create captcha * * @access public * @param array array of data captcha * @param string path create image in * @param string url captcha image folder * @param string server path font * @return string */ 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, 'font_size' => 5); foreach ($defaults $key => $val) { if ( ! is_array($data)) { if ( ! isset($$key) or $$key == '') { $$key = $val; } } else { $$key = ( ! isset($data[$key])) ? $val : $data[$key]; } } if ($img_path == '' or $img_url == '') { return false; } if ( ! @is_dir($img_path)) { return false; } if ( ! is_writable($img_path)) { return false; } if ( ! extension_loaded('gd')) { return false; } // ----------------------------------- // remove old images // ----------------------------------- list($usec, $sec) = explode(" ", microtime()); $now = ((float)$usec + (float)$sec); $current_dir = @opendir($img_path); while ($filename = @readdir($current_dir)) { if ($filename != "." , $filename != ".." , $filename != "index.html") { $name = str_replace(".jpg", "", $filename); if (($name + $expiration) < $now) { @unlink($img_path.$filename); } } } @closedir($current_dir); // ----------------------------------- // have "word" yet? // ----------------------------------- if ($word == '') { $pool = '0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'; $str = ''; ($i = 0; $i < 8; $i++) { $str .= substr($pool, mt_rand(0, strlen($pool) -1), 1); } $word = $str; } // ----------------------------------- // determine angle , position // ----------------------------------- $length = strlen($word); $angle = ($length >= 6) ? rand(-($length-6), ($length-6)) : 0; $x_axis = rand(6, (360/$length)-16); $y_axis = ($angle >= 0 ) ? rand($img_height, $img_width) : rand(6, $img_height); // ----------------------------------- // create image // ----------------------------------- // php.net recommends imagecreatetruecolor(), isn't available if (function_exists('imagecreatetruecolor')) { $im = imagecreatetruecolor($img_width, $img_height); } else { $im = imagecreate($img_width, $img_height); } // ----------------------------------- // assign colors // ----------------------------------- $bg_color = imagecolorallocate ($im, 255, 255, 255); $border_color = imagecolorallocate ($im, 153, 102, 102); $text_color = imagecolorallocate ($im, 204, 153, 153); $grid_color = imagecolorallocate($im, 255, 182, 182); $shadow_color = imagecolorallocate($im, 255, 240, 240); // ----------------------------------- // create rectangle // ----------------------------------- imagefilledrectangle($im, 0, 0, $img_width, $img_height, $bg_color); // ----------------------------------- // create spiral pattern // ----------------------------------- $theta = 1; $thetac = 7; $radius = 16; $circles = 20; $points = 32; ($i = 0; $i < ($circles * $points) - 1; $i++) { $theta = $theta + $thetac; $rad = $radius * ($i / $points ); $x = ($rad * cos($theta)) + $x_axis; $y = ($rad * sin($theta)) + $y_axis; $theta = $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, $grid_color); $theta = $theta - $thetac; } // ----------------------------------- // write text // ----------------------------------- $use_font = ($font_path != '' , file_exists($font_path) , function_exists('imagettftext')) ? true : false; if ($use_font == false) { $font_size = $font_size != 5 ? $font_size : 5; $x = rand(0, $img_width/($length/3)); $y = 0; } else { $font_size = $font_size != 5 ? $font_size : 16; $x = rand(0, $img_width/($length/1.5)); $y = $font_size+2; } ($i = 0; $i < strlen($word); $i++) { if ($use_font == false) { $y = rand(0 , $img_height/2); imagestring($im, $font_size, $x, $y, substr($word, $i, 1), $text_color); $x += ($font_size*2); } else { $y = rand($img_height/2, $img_height-3); imagettftext($im, $font_size, $angle, $x, $y, $text_color, $font_path, substr($word, $i, 1)); $x += $font_size; } } // ----------------------------------- // create border // ----------------------------------- imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color); // ----------------------------------- // generate image // ----------------------------------- $img_name = $now.'.jpg'; imagejpeg($im, $img_path.$img_name); $img = "<img src=\"$img_url$img_name\" width=\"$img_width\" height=\"$img_height\" style=\"border:0;\" alt=\" \" />"; imagedestroy($im); return array('word' => $word, 'time' => $now, 'image' => $img); } } // ------------------------------------------------------------------------ /* end of file captcha_helper.php */ /* location: ./system/heleprs/captcha_helper.php */
i have changed:
this
$defaults = array('word' => '', 'img_path' => '', 'img_url' => '', 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200);
into this
$defaults = array('word' => '', 'img_path' => '', 'img_url' => '', 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200, 'font_size' => 5);
and this
if ($use_font == false) { $font_size = 5; $x = rand(0, $img_width/($length/3)); $y = 0; } else { $font_size = 16; $x = rand(0, $img_width/($length/1.5)); $y = $font_size+2; }
into this
if ($use_font == false) { $font_size = $font_size != 5 ? $font_size : 5; $x = rand(0, $img_width/($length/3)); $y = 0; } else { $font_size = $font_size != 5 ? $font_size : 16; $x = rand(0, $img_width/($length/1.5)); $y = $font_size+2; }
step 2: create folder named captcha
@ root of codeigniter folder (you might have it) , give permissions 755 under apache current user/group.
step 3: save .ttf custom fonts under captcha/fonts
.
step 4: controller code:
$this->load->helper('captcha'); $capache_config = array( 'img_path' => 'captcha/', 'img_url' => base_url() . 'captcha/', 'img_width' => 190, 'img_height' => 60, 'font_size' => 20, 'font_path' => fcpath. 'captcha/font/verdana.ttf', 'expiration' => 7200 ); /* generate captcha */ $captcha = create_captcha($capache_config); if ($captcha !== false) { echo $captcha['image']; } else { die('no captcha created'); }
step 5: example output:
Comments
Post a Comment