mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-13 14:58:52 +00:00
- Moved the image loading outside the big loop. This brings fewer comparisons and allows us to unload the image data sooner.
- Used a more appropriate method to break the images into chunks. git-svn-id: file:///svn/phpbb/trunk@5619 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
2fb1507670
commit
1adfb39cba
2 changed files with 43 additions and 12 deletions
|
@ -175,6 +175,37 @@ if (!function_exists('array_combine'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!function_exists('str_split'))
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* A wrapper for the PHP5 function str_split()
|
||||||
|
* @param array $string contains the string to be converted
|
||||||
|
* @param array $split_length contains the length of each chunk
|
||||||
|
*
|
||||||
|
* @return Converts a string to an array. If the optional split_length parameter is specified,
|
||||||
|
* the returned array will be broken down into chunks with each being split_length in length,
|
||||||
|
* otherwise each chunk will be one character in length. FALSE is returned if split_length is
|
||||||
|
* less than 1. If the split_length length exceeds the length of string, the entire string is
|
||||||
|
* returned as the first (and only) array element.
|
||||||
|
*/
|
||||||
|
function str_split($string, $split_length = 1)
|
||||||
|
{
|
||||||
|
if ($split_length < 1)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if ($split_length >= strlen($string))
|
||||||
|
{
|
||||||
|
return array($string);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
preg_match_all('#.{1,' . $split_length . '}#s', $string, $matches);
|
||||||
|
return $matches[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get userdata
|
* Get userdata
|
||||||
* @param mixed $user user id or username
|
* @param mixed $user user id or username
|
||||||
|
|
|
@ -62,22 +62,30 @@ class ucp_confirm
|
||||||
list($usec, $sec) = explode(' ', microtime());
|
list($usec, $sec) = explode(' ', microtime());
|
||||||
mt_srand($sec * $usec);
|
mt_srand($sec * $usec);
|
||||||
|
|
||||||
$char_widths = array();
|
$char_widths = $hold_chars = array();
|
||||||
$code_len = strlen($code);
|
$code_len = strlen($code);
|
||||||
for ($i = 0; $i < $code_len; $i++)
|
for ($i = 0; $i < $code_len; $i++)
|
||||||
{
|
{
|
||||||
$char = $code{$i};
|
$char = $code{$i};
|
||||||
|
|
||||||
$width = mt_rand(0, 4);
|
$width = mt_rand(0, 4);
|
||||||
|
$raw_width = $_png[$char]['width'];
|
||||||
$char_widths[$i] = $width;
|
$char_widths[$i] = $width;
|
||||||
$img_width += $_png[$char]['width'] - $width;
|
$img_width += $raw_width - $width;
|
||||||
|
|
||||||
|
// Split the char into chunks of $raw_width + 1 length
|
||||||
|
if (empty($hold_chars[$char]))
|
||||||
|
{
|
||||||
|
$hold_chars[$char] = str_split(base64_decode($_png[$char]['data']), $raw_width + 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unset($_png);
|
||||||
|
|
||||||
$offset_x = mt_rand(0, $total_width - $img_width);
|
$offset_x = mt_rand(0, $total_width - $img_width);
|
||||||
$offset_y = mt_rand(0, $total_height - $img_height);
|
$offset_y = mt_rand(0, $total_height - $img_height);
|
||||||
|
|
||||||
$image = '';
|
$image = '';
|
||||||
$hold_chars = array();
|
|
||||||
for ($i = 0; $i < $total_height; $i++)
|
for ($i = 0; $i < $total_height; $i++)
|
||||||
{
|
{
|
||||||
$image .= chr(0);
|
$image .= chr(0);
|
||||||
|
@ -91,13 +99,7 @@ class ucp_confirm
|
||||||
|
|
||||||
for ($k = 0; $k < $code_len; $k++)
|
for ($k = 0; $k < $code_len; $k++)
|
||||||
{
|
{
|
||||||
$char = $code{$k};
|
$image .= $this->randomise(substr($hold_chars[$code{$k}][$i - $offset_y - 1], 1), $char_widths[$k]);
|
||||||
|
|
||||||
if (empty($hold_chars[$char]))
|
|
||||||
{
|
|
||||||
$hold_chars[$char] = explode("\n", chunk_split(base64_decode($_png[$char]['data']), $_png[$char]['width'] + 1, "\n"));
|
|
||||||
}
|
|
||||||
$image .= $this->randomise(substr($hold_chars[$char][$i - $offset_y - 1], 1), $char_widths[$k]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for ($k = $offset_x + $img_width; $k < $total_width; $k++)
|
for ($k = $offset_x + $img_width; $k < $total_width; $k++)
|
||||||
|
@ -124,7 +126,6 @@ class ucp_confirm
|
||||||
echo $image;
|
echo $image;
|
||||||
|
|
||||||
unset($image);
|
unset($image);
|
||||||
unset($_png);
|
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,7 +154,6 @@ class ucp_confirm
|
||||||
$new_line .= $scanline{$i};
|
$new_line .= $scanline{$i};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $new_line;
|
return $new_line;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue