[ Index ]

PHP Cross Reference of phpBB-3.3.14-deutsch

title

Body

[close]

/phpbb/captcha/ -> gd_wave.php (source)

   1  <?php
   2  /**
   3  *
   4  * This file is part of the phpBB Forum Software package.
   5  *
   6  * @copyright (c) phpBB Limited <https://www.phpbb.com>
   7  * @license GNU General Public License, version 2 (GPL-2.0)
   8  *
   9  * For full copyright and license information, please see
  10  * the docs/CREDITS.txt file.
  11  *
  12  */
  13  
  14  namespace phpbb\captcha;
  15  
  16  /**
  17  * Wave3D CAPTCHA
  18  */
  19  class gd_wave
  20  {
  21      var $width        = 360;
  22      var $height        = 96;
  23  
  24  	function execute($code, $seed)
  25      {
  26          // seed the random generator
  27          mt_srand($seed);
  28  
  29          // set height and width
  30          $img_x = $this->width;
  31          $img_y = $this->height;
  32  
  33          // Generate image
  34          $img    = imagecreatetruecolor($img_x, $img_y);
  35          $x_grid = mt_rand(6, 10);
  36          $y_grid = mt_rand(6, 10);
  37  
  38          // Ok, so lets cut to the chase. We could accurately represent this in 3d and
  39          // do all the appropriate linear transforms. my questions is... why bother?
  40          // The computational overhead is unnecessary when you consider the simple fact:
  41          // we're not here to accurately represent a model, but to just show off some random-ish
  42          // polygons
  43  
  44          // Conceive of 3 spaces.
  45          // 1) planar-space (discrete "pixel" grid)
  46          // 2) 3-space. (planar-space with z/height aspect)
  47          // 3) image space (pixels on the screen)
  48          // resolution of the planar-space we're embedding the text code in
  49          $plane_x    = 100;
  50          $plane_y    = 30;
  51  
  52          $subdivision_factor = 3;
  53  
  54          // $box is the 4 points in img_space that correspond to the corners of the plane in 3-space
  55          $box = array(
  56              'upper_left'    => array(
  57                  'x' => mt_rand(5, 15),
  58                  'y' => mt_rand(10, 15)
  59              ),
  60              'upper_right'    => array(
  61                  'x' => mt_rand($img_x - 35, $img_x - 19),
  62                  'y' => mt_rand(10, 17)
  63              ),
  64              'lower_left'    => array(
  65                  'x' => mt_rand($img_x - 45, $img_x - 5),
  66                  'y' => mt_rand($img_y - 15, $img_y - 0),
  67              ),
  68          );
  69  
  70          $box['lower_right'] = array(
  71              'x' => $box['lower_left']['x'] + $box['upper_left']['x'] - $box['upper_right']['x'],
  72              'y' => $box['lower_left']['y'] + $box['upper_left']['y'] - $box['upper_right']['y'],
  73          );
  74  
  75          // TODO
  76          $background = imagecolorallocate($img, mt_rand(155, 255), mt_rand(155, 255), mt_rand(155, 255));
  77          imagefill($img, 0, 0, $background);
  78  
  79          $random = array();
  80          $fontcolors = array();
  81  
  82          for ($i = 0; $i < 15; ++$i)
  83          {
  84              $random[$i] = imagecolorallocate($img, mt_rand(120, 255), mt_rand(120, 255), mt_rand(120, 255));
  85          }
  86  
  87          $fontcolors[0] = imagecolorallocate($img, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
  88  
  89          $colors = array();
  90  
  91          $minr = mt_rand(20, 30);
  92          $ming = mt_rand(20, 30);
  93          $minb = mt_rand(20, 30);
  94  
  95          $maxr = mt_rand(150, 230);
  96          $maxg = mt_rand(150, 230);
  97          $maxb = mt_rand(150, 230);
  98  
  99          for ($i = -30; $i <= 30; ++$i)
 100          {
 101              $coeff1 = ($i + 12) / 45;
 102              $coeff2 = 1 - $coeff1;
 103  
 104              $red = ($coeff2 * $maxr) + ($coeff1 * $minr);
 105              $green = ($coeff2 * $maxg) + ($coeff1 * $ming);
 106              $blue = ($coeff2 * $maxb) + ($coeff1 * $minb);
 107  
 108              $colors[$i] = imagecolorallocate($img, min([255, (int) $red]), min([255, (int) $green]), min([255, (int) $blue]));
 109          }
 110  
 111          // $img_buffer is the last row of 3-space positions (converted to img-space), cached
 112          // (using this means we don't need to recalculate all 4 positions for each new polygon,
 113          // merely the newest point that we're adding, which is then cached.
 114          $img_buffer = array(array(), array());
 115  
 116          // In image-space, the x- and y-offset necessary to move one unit in the x-direction in planar-space
 117          $dxx = ($box['upper_right']['x'] - $box['upper_left']['x']) / ($subdivision_factor * $plane_x);
 118          $dxy = ($box['upper_right']['y'] - $box['upper_left']['y']) / ($subdivision_factor * $plane_x);
 119  
 120          // In image-space, the x- and y-offset necessary to move one unit in the y-direction in planar-space
 121          $dyx = ($box['lower_right']['x'] - $box['upper_left']['x']) / ($subdivision_factor * $plane_y);
 122          $dyy = ($box['lower_right']['y'] - $box['upper_left']['y']) / ($subdivision_factor * $plane_y);
 123  
 124          // Initial captcha-letter offset in planar-space
 125          $plane_offset_x = mt_rand(3, 8);
 126          $plane_offset_y = mt_rand( 12, 15);
 127  
 128          // character map
 129          $map = $this->captcha_bitmaps();
 130  
 131          // matrix
 132          $plane = array();
 133  
 134          // for each character, we'll silkscreen it into our boolean pixel plane
 135          for ($c = 0, $code_num = strlen($code); $c < $code_num; ++$c)
 136          {
 137              $letter = $code[$c];
 138  
 139              for ($x = $map['width'] - 1; $x >= 0; --$x)
 140              {
 141                  for ($y = $map['height'] - 1; $y >= 0; --$y)
 142                  {
 143                      if ($map['data'][$letter][$y][$x])
 144                      {
 145                          $plane[$y + $plane_offset_y + (($c & 1) ? 1 : -1)][$x + $plane_offset_x] = true;
 146                      }
 147                  }
 148              }
 149              $plane_offset_x += 11;
 150          }
 151  
 152          // calculate our first buffer, we can't actually draw polys with these yet
 153          // img_pos_prev == screen x,y location to our immediate left.
 154          // img_pos_cur == current screen x,y location
 155          // we calculate screen position of our
 156          // current cell based on the difference from the previous cell
 157          // rather than recalculating from absolute coordinates
 158          // What we cache into the $img_buffer contains the raised text coordinates.
 159          $img_pos_prev    = $img_buffer[0][0] = array($box['upper_left']['x'], $box['upper_left']['y']);
 160          $prev_height = $this->wave_height(0, 0, $subdivision_factor);
 161          $full_x            = $plane_x * $subdivision_factor;
 162          $full_y            = $plane_y * $subdivision_factor;
 163  
 164          for ($x = 1; $x <= $full_x; ++$x)
 165          {
 166              $cur_height        = $this->wave_height($x, 0, $subdivision_factor);
 167              $offset            = $cur_height - $prev_height;
 168              $img_pos_cur    = array($img_pos_prev[0] + $dxx, $img_pos_prev[1] + $dxy + $offset);
 169  
 170              $img_buffer[0][$x]    = $img_pos_cur;
 171              $img_pos_prev        = $img_pos_cur;
 172              $prev_height        = $cur_height;
 173          }
 174  
 175          for ($y = 1; $y <= $full_y; ++$y)
 176          {
 177              // swap buffers
 178              $buffer_cur        = $y & 1;
 179              $buffer_prev    = 1 - $buffer_cur;
 180  
 181              $prev_height    = $this->wave_height(0, $y, $subdivision_factor);
 182              $offset            = $prev_height - $this->wave_height(0, $y - 1, $subdivision_factor);
 183              $img_pos_cur    = array($img_buffer[$buffer_prev][0][0] + $dyx, min($img_buffer[$buffer_prev][0][1] + $dyy + $offset, $img_y - 1));
 184  
 185              // make sure we don't try to write off the page
 186              $img_pos_prev    = $img_pos_cur;
 187  
 188              $img_buffer[$buffer_cur][0]    = $img_pos_cur;
 189  
 190              for ($x = 1; $x <= $full_x; ++$x)
 191              {
 192                  $cur_height        = $this->wave_height($x, $y, $subdivision_factor) + $this->grid_height($x, $y, $x_grid, $y_grid, 1);
 193  
 194                  // height is a z-factor, not a y-factor
 195                  $offset            = $cur_height - $prev_height;
 196                  $img_pos_cur    = array($img_pos_prev[0] + $dxx, $img_pos_prev[1] + $dxy + $offset);
 197  
 198                  // height is float, index it to an int, get closest color
 199                  $color            = $colors[intval($cur_height)];
 200                  $img_pos_prev    = $img_pos_cur;
 201                  $prev_height    = $cur_height;
 202  
 203                  $y_index_old = intval(($y - 1) / $subdivision_factor);
 204                  $y_index_new = intval($y / $subdivision_factor);
 205                  $x_index_old = intval(($x - 1) / $subdivision_factor);
 206                  $x_index_new = intval($x / $subdivision_factor);
 207  
 208                  if (!empty($plane[$y_index_new][$x_index_new]))
 209                  {
 210                      $img_pos_cur[1]    += $this->wave_height($x, $y, $subdivision_factor, 1) - 30 - $cur_height;
 211                      $color            = $colors[20];
 212                  }
 213                  $img_pos_cur[1] = min($img_pos_cur[1], $img_y - 1);
 214                  $img_buffer[$buffer_cur][$x] = $img_pos_cur;
 215  
 216                  // Smooth the edges as much as possible by having not more than one low<->high traingle per square
 217                  // Otherwise, just
 218                  $diag_down    = (empty($plane[$y_index_old][$x_index_old]) == empty($plane[$y_index_new][$x_index_new]));
 219                  $diag_up    = (empty($plane[$y_index_old][$x_index_new]) == empty($plane[$y_index_new][$x_index_old]));
 220  
 221                  // natural switching
 222                  $mode = ($x + $y) & 1;
 223  
 224                  // override if it requires it
 225                  if ($diag_down != $diag_up)
 226                  {
 227                      $mode = $diag_up;
 228                  }
 229  
 230                  if ($mode)
 231                  {
 232                      //        +-/              /
 233                      // 1    |/        2     /|
 234                      //        /            /-+
 235                      $poly1 = array_merge($img_buffer[$buffer_cur][$x - 1], $img_buffer[$buffer_prev][$x - 1], $img_buffer[$buffer_prev][$x]);
 236                      $poly2 = array_merge($img_buffer[$buffer_cur][$x - 1], $img_buffer[$buffer_cur][$x], $img_buffer[$buffer_prev][$x]);
 237                  }
 238                  else
 239                  {
 240                      //        \            \-+
 241                      // 1    |\        2     \|
 242                      //        +-\              \
 243                      $poly1 = array_merge($img_buffer[$buffer_cur][$x - 1], $img_buffer[$buffer_prev][$x - 1], $img_buffer[$buffer_cur][$x]);
 244                      $poly2 = array_merge($img_buffer[$buffer_prev][$x - 1], $img_buffer[$buffer_prev][$x], $img_buffer[$buffer_cur][$x]);
 245                  }
 246  
 247                  imagefilledpolygon($img, $poly1, 3, $color);
 248                  imagefilledpolygon($img, $poly2, 3, $color);
 249              }
 250          }
 251  
 252          // Output image
 253          header('Content-Type: image/png');
 254          header('Cache-control: no-cache, no-store');
 255          //$mtime = explode(' ', microtime());
 256          //$totaltime = $mtime[0] + $mtime[1] - $starttime;
 257  
 258          //echo $totaltime . "<br />\n";
 259          //echo memory_get_usage() - $tmp;
 260          imagepng($img);
 261          imagedestroy($img);
 262      }
 263  
 264  	function wave_height($x, $y, $factor = 1, $tweak = 0.7)
 265      {
 266          // stretch the wave. TODO: pretty it up
 267          $x = $x/5 + 180;
 268          $y = $y/4;
 269          return ((sin($x / (3 * $factor)) + sin($y / (3 * $factor))) * 10 * $tweak);
 270      }
 271  
 272  	function grid_height($x, $y, $x_grid, $y_grid, $factor = 1)
 273      {
 274          return ((!($x % ($x_grid * $factor)) || !($y % ($y_grid * $factor))) ? 3 : 0);
 275      }
 276  
 277  	function captcha_bitmaps()
 278      {
 279          return array(
 280              'width'        => 9,
 281              'height'    => 13,
 282              'data'        => array(
 283                  'A' => array(
 284                      array(0,0,1,1,1,1,0,0,0),
 285                      array(0,1,0,0,0,0,1,0,0),
 286                      array(1,0,0,0,0,0,0,1,0),
 287                      array(1,0,0,0,0,0,0,1,0),
 288                      array(1,0,0,0,0,0,0,1,0),
 289                      array(1,0,0,0,0,0,0,1,0),
 290                      array(1,0,0,0,0,0,0,1,0),
 291                      array(1,1,1,1,1,1,1,1,0),
 292                      array(1,0,0,0,0,0,0,1,0),
 293                      array(1,0,0,0,0,0,0,1,0),
 294                      array(1,0,0,0,0,0,0,1,0),
 295                      array(1,0,0,0,0,0,0,1,0),
 296                      array(1,0,0,0,0,0,0,1,0),
 297                      array(0,0,0,0,0,0,0,0,0),
 298                  ),
 299                  'B' => array(
 300                      array(1,1,1,1,1,1,0,0,0),
 301                      array(1,0,0,0,0,0,1,0,0),
 302                      array(1,0,0,0,0,0,0,1,0),
 303                      array(1,0,0,0,0,0,0,1,0),
 304                      array(1,0,0,0,0,0,0,1,0),
 305                      array(1,0,0,0,0,0,1,0,0),
 306                      array(1,1,1,1,1,1,0,0,0),
 307                      array(1,0,0,0,0,0,1,0,0),
 308                      array(1,0,0,0,0,0,0,1,0),
 309                      array(1,0,0,0,0,0,0,1,0),
 310                      array(1,0,0,0,0,0,0,1,0),
 311                      array(1,0,0,0,0,0,1,0,0),
 312                      array(1,1,1,1,1,1,0,0,0),
 313                      array(0,0,0,0,0,0,0,0,0),
 314                  ),
 315                  'C' => array(
 316                      array(0,0,1,1,1,1,1,0,0),
 317                      array(0,1,0,0,0,0,0,1,0),
 318                      array(1,0,0,0,0,0,0,0,1),
 319                      array(1,0,0,0,0,0,0,0,0),
 320                      array(1,0,0,0,0,0,0,0,0),
 321                      array(1,0,0,0,0,0,0,0,0),
 322                      array(1,0,0,0,0,0,0,0,0),
 323                      array(1,0,0,0,0,0,0,0,0),
 324                      array(1,0,0,0,0,0,0,0,0),
 325                      array(1,0,0,0,0,0,0,0,1),
 326                      array(0,1,0,0,0,0,0,1,0),
 327                      array(0,0,1,1,1,1,1,0,0),
 328                      array(0,0,0,0,0,0,0,0,0),
 329                      array(0,0,0,0,0,0,0,0,0),
 330                  ),
 331                  'D' => array(
 332                      array(1,1,1,1,1,1,1,0,0),
 333                      array(1,0,0,0,0,0,0,1,0),
 334                      array(1,0,0,0,0,0,0,0,1),
 335                      array(1,0,0,0,0,0,0,0,1),
 336                      array(1,0,0,0,0,0,0,0,1),
 337                      array(1,0,0,0,0,0,0,0,1),
 338                      array(1,0,0,0,0,0,0,0,1),
 339                      array(1,0,0,0,0,0,0,0,1),
 340                      array(1,0,0,0,0,0,0,0,1),
 341                      array(1,0,0,0,0,0,0,1,0),
 342                      array(1,1,1,1,1,1,1,0,0),
 343                      array(0,0,0,0,0,0,0,0,0),
 344                      array(0,0,0,0,0,0,0,0,0),
 345                      array(0,0,0,0,0,0,0,0,0),
 346                  ),
 347                  'E' => array(
 348                      array(0,0,1,1,1,1,1,1,1),
 349                      array(0,1,0,0,0,0,0,0,0),
 350                      array(1,0,0,0,0,0,0,0,0),
 351                      array(1,0,0,0,0,0,0,0,0),
 352                      array(1,0,0,0,0,0,0,0,0),
 353                      array(1,1,1,1,1,1,1,0,0),
 354                      array(1,0,0,0,0,0,0,0,0),
 355                      array(1,0,0,0,0,0,0,0,0),
 356                      array(1,0,0,0,0,0,0,0,0),
 357                      array(0,1,0,0,0,0,0,0,0),
 358                      array(0,0,1,1,1,1,1,1,1),
 359                      array(0,0,0,0,0,0,0,0,0),
 360                      array(0,0,0,0,0,0,0,0,0),
 361                      array(0,0,0,0,0,0,0,0,0),
 362                  ),
 363                  'F' => array(
 364                      array(0,0,1,1,1,1,1,1,0),
 365                      array(0,1,0,0,0,0,0,0,0),
 366                      array(1,0,0,0,0,0,0,0,0),
 367                      array(1,0,0,0,0,0,0,0,0),
 368                      array(1,0,0,0,0,0,0,0,0),
 369                      array(1,1,1,1,1,1,0,0,0),
 370                      array(1,0,0,0,0,0,0,0,0),
 371                      array(1,0,0,0,0,0,0,0,0),
 372                      array(1,0,0,0,0,0,0,0,0),
 373                      array(1,0,0,0,0,0,0,0,0),
 374                      array(1,0,0,0,0,0,0,0,0),
 375                      array(1,0,0,0,0,0,0,0,0),
 376                      array(0,0,0,0,0,0,0,0,0),
 377                      array(0,0,0,0,0,0,0,0,0),
 378                  ),
 379                  'G' => array(
 380                      array(0,0,1,1,1,1,1,0,0),
 381                      array(0,1,0,0,0,0,0,1,0),
 382                      array(1,0,0,0,0,0,0,0,1),
 383                      array(1,0,0,0,0,0,0,0,1),
 384                      array(1,0,0,0,0,0,0,0,0),
 385                      array(1,0,0,0,0,0,0,0,0),
 386                      array(1,0,0,0,0,0,0,0,0),
 387                      array(1,0,0,0,0,0,0,1,1),
 388                      array(1,0,0,0,0,0,0,0,1),
 389                      array(1,0,0,0,0,0,0,0,1),
 390                      array(0,1,0,0,0,0,0,1,0),
 391                      array(0,0,1,1,1,1,1,0,0),
 392                      array(0,0,0,0,0,0,0,0,0),
 393                      array(0,0,0,0,0,0,0,0,0),
 394                  ),
 395                  'H' => array(
 396                      array(1,0,0,0,0,0,1,0,0),
 397                      array(1,0,0,0,0,0,1,0,0),
 398                      array(1,0,0,0,0,0,1,0,0),
 399                      array(1,0,0,0,0,0,1,0,0),
 400                      array(1,0,0,0,0,0,1,0,0),
 401                      array(1,1,1,1,1,1,1,0,0),
 402                      array(1,0,0,0,0,0,1,0,0),
 403                      array(1,0,0,0,0,0,1,0,0),
 404                      array(1,0,0,0,0,0,1,0,0),
 405                      array(1,0,0,0,0,0,1,0,0),
 406                      array(1,0,0,0,0,0,1,0,0),
 407                      array(0,0,0,0,0,0,0,0,0),
 408                      array(0,0,0,0,0,0,0,0,0),
 409                      array(0,0,0,0,0,0,0,0,0),
 410                  ),
 411                  'I' => array(
 412                      array(0,1,1,1,1,1,1,1,0),
 413                      array(0,0,0,0,1,0,0,0,0),
 414                      array(0,0,0,0,1,0,0,0,0),
 415                      array(0,0,0,0,1,0,0,0,0),
 416                      array(0,0,0,0,1,0,0,0,0),
 417                      array(0,0,0,0,1,0,0,0,0),
 418                      array(0,0,0,0,1,0,0,0,0),
 419                      array(0,0,0,0,1,0,0,0,0),
 420                      array(0,0,0,0,1,0,0,0,0),
 421                      array(0,1,1,1,1,1,1,1,0),
 422                      array(0,0,0,0,0,0,0,0,0),
 423                      array(0,0,0,0,0,0,0,0,0),
 424                      array(0,0,0,0,0,0,0,0,0),
 425                      array(0,0,0,0,0,0,0,0,0),
 426                  ),
 427                  'J' => array(
 428                      array(0,0,0,0,0,0,1,1,1),
 429                      array(0,0,0,0,0,0,0,0,1),
 430                      array(0,0,0,0,0,0,0,0,1),
 431                      array(0,0,0,0,0,0,0,0,1),
 432                      array(0,0,0,0,0,0,0,0,1),
 433                      array(0,0,0,0,0,0,0,0,1),
 434                      array(0,0,0,0,0,0,0,0,1),
 435                      array(0,1,0,0,0,0,0,0,1),
 436                      array(0,1,0,0,0,0,0,0,1),
 437                      array(0,0,1,0,0,0,0,1,0),
 438                      array(0,0,0,1,1,1,1,0,0),
 439                      array(0,0,0,0,0,0,0,0,0),
 440                      array(0,0,0,0,0,0,0,0,0),
 441                      array(0,0,0,0,0,0,0,0,0),
 442                  ),
 443                  'K' => array(
 444                      array(1,0,0,0,0,0,1,0,0),
 445                      array(1,0,0,0,0,1,0,0,0),
 446                      array(1,0,0,0,1,0,0,0,0),
 447                      array(1,0,0,1,0,0,0,0,0),
 448                      array(1,0,1,0,0,0,0,0,0),
 449                      array(1,1,0,0,0,0,0,0,0),
 450                      array(1,0,1,0,0,0,0,0,0),
 451                      array(1,0,0,1,0,0,0,0,0),
 452                      array(1,0,0,0,1,0,0,0,0),
 453                      array(1,0,0,0,0,1,0,0,0),
 454                      array(1,0,0,0,0,0,1,0,0),
 455                      array(0,0,0,0,0,0,0,0,0),
 456                      array(0,0,0,0,0,0,0,0,0),
 457                      array(0,0,0,0,0,0,0,0,0),
 458                  ),
 459                  'L' => array(
 460                      array(1,0,0,0,0,0,0,0,0),
 461                      array(1,0,0,0,0,0,0,0,0),
 462                      array(1,0,0,0,0,0,0,0,0),
 463                      array(1,0,0,0,0,0,0,0,0),
 464                      array(1,0,0,0,0,0,0,0,0),
 465                      array(1,0,0,0,0,0,0,0,0),
 466                      array(1,0,0,0,0,0,0,0,0),
 467                      array(1,0,0,0,0,0,0,0,0),
 468                      array(1,0,0,0,0,0,0,0,0),
 469                      array(0,1,0,0,0,0,0,0,0),
 470                      array(0,0,1,1,1,1,0,0,0),
 471                      array(0,0,0,0,0,0,0,0,0),
 472                      array(0,0,0,0,0,0,0,0,0),
 473                      array(0,0,0,0,0,0,0,0,0),
 474                  ),
 475                  'M' => array(
 476                      array(0,1,0,0,0,0,0,1,0),
 477                      array(0,1,1,0,0,0,1,1,0),
 478                      array(0,1,0,1,0,1,0,1,0),
 479                      array(0,1,0,0,1,0,0,1,0),
 480                      array(0,1,0,0,0,0,0,1,0),
 481                      array(0,1,0,0,0,0,0,1,0),
 482                      array(0,1,0,0,0,0,0,1,0),
 483                      array(0,1,0,0,0,0,0,1,0),
 484                      array(0,1,0,0,0,0,0,1,0),
 485                      array(0,0,0,0,0,0,0,0,0),
 486                      array(0,0,0,0,0,0,0,0,0),
 487                      array(0,0,0,0,0,0,0,0,0),
 488                      array(0,0,0,0,0,0,0,0,0),
 489                      array(0,0,0,0,0,0,0,0,0),
 490                  ),
 491                  'N' => array(
 492                      array(1,0,0,0,0,0,0,0,1),
 493                      array(1,1,0,0,0,0,0,0,1),
 494                      array(1,0,1,0,0,0,0,0,1),
 495                      array(1,0,0,1,0,0,0,0,1),
 496                      array(1,0,0,0,1,0,0,0,1),
 497                      array(1,0,0,0,0,1,0,0,1),
 498                      array(1,0,0,0,0,0,1,0,1),
 499                      array(1,0,0,0,0,0,0,1,1),
 500                      array(1,0,0,0,0,0,0,0,1),
 501                      array(0,0,0,0,0,0,0,0,0),
 502                      array(0,0,0,0,0,0,0,0,0),
 503                      array(0,0,0,0,0,0,0,0,0),
 504                      array(0,0,0,0,0,0,0,0,0),
 505                      array(0,0,0,0,0,0,0,0,0),
 506                  ),
 507                  'O' => array(
 508                      array(0,0,0,1,1,1,0,0,0),
 509                      array(0,0,1,0,0,0,1,0,0),
 510                      array(0,1,0,0,0,0,0,1,0),
 511                      array(1,0,0,0,0,0,0,0,1),
 512                      array(1,0,0,0,0,0,0,0,1),
 513                      array(1,0,0,0,0,0,0,0,1),
 514                      array(1,0,0,0,0,0,0,0,1),
 515                      array(1,0,0,0,0,0,0,0,1),
 516                      array(0,1,0,0,0,0,0,1,0),
 517                      array(0,0,1,0,0,0,1,0,0),
 518                      array(0,0,0,1,1,1,0,0,0),
 519                      array(0,0,0,0,0,0,0,0,0),
 520                      array(0,0,0,0,0,0,0,0,0),
 521                      array(0,0,0,0,0,0,0,0,0),
 522                  ),
 523                  'P' => array(
 524                      array(1,1,1,1,1,1,0,0,0),
 525                      array(1,0,0,0,0,0,1,0,0),
 526                      array(1,0,0,0,0,0,0,1,0),
 527                      array(1,0,0,0,0,0,0,1,0),
 528                      array(1,0,0,0,0,0,0,1,0),
 529                      array(1,0,0,0,0,0,0,1,0),
 530                      array(1,0,0,0,0,0,1,0,0),
 531                      array(1,1,1,1,1,1,0,0,0),
 532                      array(1,0,0,0,0,0,0,0,0),
 533                      array(1,0,0,0,0,0,0,0,0),
 534                      array(1,0,0,0,0,0,0,0,0),
 535                      array(1,0,0,0,0,0,0,0,0),
 536                      array(1,0,0,0,0,0,0,0,0),
 537                      array(0,0,0,0,0,0,0,0,0),
 538                  ),
 539                  'Q' => array(
 540                      array(0,0,1,1,1,1,0,0,0),
 541                      array(0,1,0,0,0,0,1,0,0),
 542                      array(1,0,0,0,0,0,0,1,0),
 543                      array(1,0,0,0,0,0,0,1,0),
 544                      array(1,0,0,0,0,0,0,1,0),
 545                      array(1,0,0,0,0,0,0,1,0),
 546                      array(1,0,0,0,1,0,0,1,0),
 547                      array(1,0,0,0,0,1,0,1,0),
 548                      array(0,1,0,0,0,0,1,0,0),
 549                      array(0,0,1,1,1,1,0,1,0),
 550                      array(0,0,0,0,0,0,0,0,1),
 551                      array(0,0,0,0,0,0,0,0,0),
 552                      array(0,0,0,0,0,0,0,0,0),
 553                      array(0,0,0,0,0,0,0,0,0),
 554                  ),
 555                  'R' => array(
 556                      array(1,1,1,1,1,1,0,0,0),
 557                      array(1,0,0,0,0,0,1,0,0),
 558                      array(1,0,0,0,0,0,0,1,0),
 559                      array(1,0,0,0,0,0,0,1,0),
 560                      array(1,0,0,0,0,0,0,1,0),
 561                      array(1,0,0,0,0,0,1,0,0),
 562                      array(1,1,1,1,1,1,0,0,0),
 563                      array(1,0,1,0,0,0,0,0,0),
 564                      array(1,0,0,1,0,0,0,0,0),
 565                      array(1,0,0,0,1,0,0,0,0),
 566                      array(1,0,0,0,0,1,0,0,0),
 567                      array(1,0,0,0,0,0,1,0,0),
 568                      array(0,0,0,0,0,0,0,0,0),
 569                      array(0,0,0,0,0,0,0,0,0),
 570                  ),
 571                  'S' => array(
 572                      array(0,0,1,1,1,1,1,1,1),
 573                      array(0,1,0,0,0,0,0,0,0),
 574                      array(1,0,0,0,0,0,0,0,0),
 575                      array(1,0,0,0,0,0,0,0,0),
 576                      array(1,0,0,0,0,0,0,0,0),
 577                      array(0,1,0,0,0,0,0,0,0),
 578                      array(0,0,1,1,1,1,1,0,0),
 579                      array(0,0,0,0,0,0,0,1,0),
 580                      array(0,0,0,0,0,0,0,0,1),
 581                      array(0,0,0,0,0,0,0,0,1),
 582                      array(0,0,0,0,0,0,0,1,0),
 583                      array(1,1,1,1,1,1,1,0,0),
 584                      array(0,0,0,0,0,0,0,0,0),
 585                      array(0,0,0,0,0,0,0,0,0),
 586                  ),
 587                  'T' => array(
 588                      array(1,1,1,1,1,1,1,1,1),
 589                      array(0,0,0,0,1,0,0,0,0),
 590                      array(0,0,0,0,1,0,0,0,0),
 591                      array(0,0,0,0,1,0,0,0,0),
 592                      array(0,0,0,0,1,0,0,0,0),
 593                      array(0,0,0,0,1,0,0,0,0),
 594                      array(0,0,0,0,1,0,0,0,0),
 595                      array(0,0,0,0,1,0,0,0,0),
 596                      array(0,0,0,0,1,0,0,0,0),
 597                      array(0,0,0,0,1,0,0,0,0),
 598                      array(0,0,0,0,1,0,0,0,0),
 599                      array(0,0,0,0,0,0,0,0,0),
 600                      array(0,0,0,0,0,0,0,0,0),
 601                      array(0,0,0,0,0,0,0,0,0),
 602                  ),
 603                  'U' => array(
 604                      array(1,0,0,0,0,0,0,0,1),
 605                      array(1,0,0,0,0,0,0,0,1),
 606                      array(1,0,0,0,0,0,0,0,1),
 607                      array(1,0,0,0,0,0,0,0,1),
 608                      array(1,0,0,0,0,0,0,0,1),
 609                      array(1,0,0,0,0,0,0,0,1),
 610                      array(1,0,0,0,0,0,0,0,1),
 611                      array(1,0,0,0,0,0,0,0,1),
 612                      array(1,0,0,0,0,0,0,0,1),
 613                      array(0,1,0,0,0,0,0,1,0),
 614                      array(0,0,1,1,1,1,1,0,0),
 615                      array(0,0,0,0,0,0,0,0,0),
 616                      array(0,0,0,0,0,0,0,0,0),
 617                      array(0,0,0,0,0,0,0,0,0),
 618                  ),
 619                  'V' => array(
 620                      array(1,0,0,0,0,0,0,0,1),
 621                      array(1,0,0,0,0,0,0,0,1),
 622                      array(1,0,0,0,0,0,0,0,1),
 623                      array(1,0,0,0,0,0,0,0,1),
 624                      array(1,0,0,0,0,0,0,0,1),
 625                      array(1,0,0,0,0,0,0,0,1),
 626                      array(1,0,0,0,0,0,0,0,1),
 627                      array(0,1,0,0,0,0,0,1,0),
 628                      array(0,0,1,0,0,0,1,0,0),
 629                      array(0,0,0,1,0,1,0,0,0),
 630                      array(0,0,0,0,1,0,0,0,0),
 631                      array(0,0,0,0,0,0,0,0,0),
 632                      array(0,0,0,0,0,0,0,0,0),
 633                      array(0,0,0,0,0,0,0,0,0),
 634                  ),
 635                  'W' => array(
 636                      array(1,0,0,0,0,0,0,0,1),
 637                      array(1,0,0,0,0,0,0,0,1),
 638                      array(1,0,0,0,0,0,0,0,1),
 639                      array(1,0,0,0,0,0,0,0,1),
 640                      array(1,0,0,0,1,0,0,0,1),
 641                      array(1,0,0,1,0,1,0,0,1),
 642                      array(1,0,1,0,0,0,1,0,1),
 643                      array(1,1,0,0,0,0,0,1,1),
 644                      array(1,0,0,0,0,0,0,0,1),
 645                      array(0,0,0,0,0,0,0,0,0),
 646                      array(0,0,0,0,0,0,0,0,0),
 647                      array(0,0,0,0,0,0,0,0,0),
 648                      array(0,0,0,0,0,0,0,0,0),
 649                      array(0,0,0,0,0,0,0,0,0),
 650                  ),
 651                  'X' => array(
 652                      array(1,0,0,0,0,0,0,0,1),
 653                      array(1,0,0,0,0,0,0,0,1),
 654                      array(0,1,0,0,0,0,0,1,0),
 655                      array(0,0,1,0,0,0,1,0,0),
 656                      array(0,0,0,1,0,1,0,0,0),
 657                      array(0,0,0,0,1,0,0,0,0),
 658                      array(0,0,0,1,0,1,0,0,0),
 659                      array(0,0,1,0,0,0,1,0,0),
 660                      array(0,1,0,0,0,0,0,1,0),
 661                      array(1,0,0,0,0,0,0,0,1),
 662                      array(1,0,0,0,0,0,0,0,1),
 663                      array(0,0,0,0,0,0,0,0,0),
 664                      array(0,0,0,0,0,0,0,0,0),
 665                      array(0,0,0,0,0,0,0,0,0),
 666                  ),
 667                  'Y' => array(
 668                      array(1,0,0,0,0,0,0,0,1),
 669                      array(1,0,0,0,0,0,0,0,1),
 670                      array(1,0,0,0,0,0,0,0,1),
 671                      array(0,1,0,0,0,0,0,1,0),
 672                      array(0,0,1,0,0,0,1,0,0),
 673                      array(0,0,0,1,0,1,0,0,0),
 674                      array(0,0,0,0,1,0,0,0,0),
 675                      array(0,0,0,0,1,0,0,0,0),
 676                      array(0,0,0,0,1,0,0,0,0),
 677                      array(0,0,0,0,1,0,0,0,0),
 678                      array(0,0,0,0,1,0,0,0,0),
 679                      array(0,0,0,0,0,0,0,0,0),
 680                      array(0,0,0,0,0,0,0,0,0),
 681                      array(0,0,0,0,0,0,0,0,0),
 682                  ),
 683                  'Z' => array(
 684                      array(1,1,1,1,1,1,1,1,1),
 685                      array(1,0,0,0,0,0,0,0,1),
 686                      array(0,0,0,0,0,0,0,1,0),
 687                      array(0,0,0,0,0,0,1,0,0),
 688                      array(0,0,0,0,0,1,0,0,0),
 689                      array(0,0,0,0,1,0,0,0,0),
 690                      array(0,0,0,1,0,0,0,0,0),
 691                      array(0,0,1,0,0,0,0,0,0),
 692                      array(0,1,0,0,0,0,0,0,0),
 693                      array(1,0,0,0,0,0,0,0,1),
 694                      array(1,1,1,1,1,1,1,1,1),
 695                      array(0,0,0,0,0,0,0,0,0),
 696                      array(0,0,0,0,0,0,0,0,0),
 697                      array(0,0,0,0,0,0,0,0,0),
 698                  ),
 699                  '1' => array(
 700                      array(0,0,0,0,1,0,0,0,0),
 701                      array(0,0,0,1,1,0,0,0,0),
 702                      array(0,0,1,0,1,0,0,0,0),
 703                      array(0,1,0,0,1,0,0,0,0),
 704                      array(0,0,0,0,1,0,0,0,0),
 705                      array(0,0,0,0,1,0,0,0,0),
 706                      array(0,0,0,0,1,0,0,0,0),
 707                      array(0,0,0,0,1,0,0,0,0),
 708                      array(0,0,0,0,1,0,0,0,0),
 709                      array(0,0,0,0,1,0,0,0,0),
 710                      array(0,0,0,0,1,0,0,0,0),
 711                      array(0,1,1,1,1,1,1,1,0),
 712                      array(0,0,0,0,0,0,0,0,0),
 713                      array(0,0,0,0,0,0,0,0,0),
 714                  ),
 715                  '2' => array(
 716                      array(0,0,0,1,1,1,0,0,0),
 717                      array(0,0,1,0,0,0,1,0,0),
 718                      array(0,1,0,0,0,0,0,1,0),
 719                      array(0,0,0,0,0,0,0,0,1),
 720                      array(0,0,0,0,0,0,0,0,1),
 721                      array(0,0,0,0,0,0,0,0,1),
 722                      array(0,0,0,0,0,0,0,1,0),
 723                      array(0,0,0,0,0,0,1,0,0),
 724                      array(0,0,0,0,0,1,0,0,0),
 725                      array(0,0,0,0,1,0,0,0,0),
 726                      array(0,0,0,1,0,0,0,0,0),
 727                      array(0,0,1,0,0,0,0,0,0),
 728                      array(0,1,1,1,1,1,1,1,1),
 729                      array(0,0,0,0,0,0,0,0,0),
 730                  ),
 731                  '3' => array(
 732                      array(0,0,0,1,1,1,1,0,0),
 733                      array(0,0,1,0,0,0,0,1,0),
 734                      array(0,1,0,0,0,0,0,0,1),
 735                      array(0,0,0,0,0,0,0,0,1),
 736                      array(0,0,0,0,0,0,0,0,1),
 737                      array(0,0,0,0,0,0,0,1,0),
 738                      array(0,0,0,0,0,1,1,0,0),
 739                      array(0,0,0,0,0,0,0,1,0),
 740                      array(0,0,0,0,0,0,0,0,1),
 741                      array(0,0,0,0,0,0,0,0,1),
 742                      array(0,1,0,0,0,0,0,0,1),
 743                      array(0,0,1,0,0,0,0,1,0),
 744                      array(0,0,0,1,1,1,1,0,0),
 745                      array(0,0,0,0,0,0,0,0,0),
 746                  ),
 747                  '4' => array(
 748                      array(0,0,0,0,0,0,0,1,0),
 749                      array(0,0,0,0,0,0,1,1,0),
 750                      array(0,0,0,0,0,1,0,1,0),
 751                      array(0,0,0,0,1,0,0,1,0),
 752                      array(0,0,0,1,0,0,0,1,0),
 753                      array(0,0,1,0,0,0,0,1,0),
 754                      array(0,1,1,1,1,1,1,1,1),
 755                      array(0,0,0,0,0,0,0,1,0),
 756                      array(0,0,0,0,0,0,0,1,0),
 757                      array(0,0,0,0,0,0,0,1,0),
 758                      array(0,0,0,0,0,0,0,1,0),
 759                      array(0,0,0,0,0,0,0,0,0),
 760                      array(0,0,0,0,0,0,0,0,0),
 761                      array(0,0,0,0,0,0,0,0,0),
 762                  ),
 763                  '5' => array(
 764                      array(1,1,1,1,1,1,1,1,1),
 765                      array(1,0,0,0,0,0,0,0,0),
 766                      array(1,0,0,0,0,0,0,0,0),
 767                      array(1,0,0,0,0,0,0,0,0),
 768                      array(0,1,0,0,0,0,0,0,0),
 769                      array(0,0,1,1,1,1,1,0,0),
 770                      array(0,0,0,0,0,0,0,1,0),
 771                      array(0,0,0,0,0,0,0,0,1),
 772                      array(1,0,0,0,0,0,0,0,1),
 773                      array(0,1,0,0,0,0,0,1,0),
 774                      array(0,0,1,1,1,1,1,0,0),
 775                      array(0,0,0,0,0,0,0,0,0),
 776                      array(0,0,0,0,0,0,0,0,0),
 777                      array(0,0,0,0,0,0,0,0,0),
 778                  ),
 779                  '6' => array(
 780                      array(0,0,1,1,1,1,1,0,0),
 781                      array(0,1,0,0,0,0,0,1,0),
 782                      array(1,0,0,0,0,0,0,0,1),
 783                      array(1,0,0,0,0,0,0,0,0),
 784                      array(1,0,0,0,0,0,0,0,0),
 785                      array(1,0,0,1,1,1,1,0,0),
 786                      array(1,0,1,0,0,0,0,1,0),
 787                      array(1,1,0,0,0,0,0,0,1),
 788                      array(1,0,0,0,0,0,0,0,1),
 789                      array(1,0,0,0,0,0,0,0,1),
 790                      array(0,1,0,0,0,0,0,1,0),
 791                      array(0,0,1,1,1,1,1,0,0),
 792                      array(0,0,0,0,0,0,0,0,0),
 793                      array(0,0,0,0,0,0,0,0,0),
 794                      array(0,0,0,0,0,0,0,0,0),
 795                  ),
 796                  '7' => array(
 797                      array(1,1,1,1,1,1,1,1,1),
 798                      array(1,0,0,0,0,0,0,0,1),
 799                      array(0,0,0,0,0,0,0,1,0),
 800                      array(0,0,0,0,0,0,1,0,0),
 801                      array(0,0,0,0,0,1,0,0,0),
 802                      array(0,0,0,0,1,0,0,0,0),
 803                      array(0,0,0,0,1,0,0,0,0),
 804                      array(0,0,0,0,1,0,0,0,0),
 805                      array(0,0,0,0,1,0,0,0,0),
 806                      array(0,0,0,0,1,0,0,0,0),
 807                      array(0,0,0,0,1,0,0,0,0),
 808                      array(0,0,0,0,0,0,0,0,0),
 809                      array(0,0,0,0,0,0,0,0,0),
 810                      array(0,0,0,0,0,0,0,0,0),
 811                  ),
 812                  '8' => array(
 813                      array(0,0,1,1,1,1,1,0,0),
 814                      array(0,1,0,0,0,0,0,1,0),
 815                      array(1,0,0,0,0,0,0,0,1),
 816                      array(1,0,0,0,0,0,0,0,1),
 817                      array(1,0,0,0,0,0,0,0,1),
 818                      array(0,1,0,0,0,0,0,1,0),
 819                      array(0,0,1,1,1,1,1,0,0),
 820                      array(0,1,0,0,0,0,0,1,0),
 821                      array(1,0,0,0,0,0,0,0,1),
 822                      array(1,0,0,0,0,0,0,0,1),
 823                      array(1,0,0,0,0,0,0,0,1),
 824                      array(0,1,0,0,0,0,0,1,0),
 825                      array(0,0,1,1,1,1,1,0,0),
 826                      array(0,0,0,0,0,0,0,0,0),
 827                  ),
 828                  '9' => array(
 829                      array(0,0,0,1,1,1,1,0,0),
 830                      array(0,0,1,0,0,0,0,1,0),
 831                      array(0,1,0,0,0,0,0,0,1),
 832                      array(0,1,0,0,0,0,0,0,1),
 833                      array(0,1,0,0,0,0,0,0,1),
 834                      array(0,1,0,0,0,0,0,1,1),
 835                      array(0,0,1,1,1,1,1,0,1),
 836                      array(0,0,0,0,0,0,0,0,1),
 837                      array(0,0,0,0,0,0,0,0,1),
 838                      array(0,1,0,0,0,0,0,0,1),
 839                      array(0,0,1,0,0,0,0,1,0),
 840                      array(0,0,0,1,1,1,1,0,0),
 841                      array(0,0,0,0,0,0,0,0,0),
 842                      array(0,0,0,0,0,0,0,0,0),
 843                  ),
 844              )
 845          );
 846      }
 847  }


Generated: Mon Nov 25 19:05:08 2024 Cross-referenced by PHPXref 0.7.1