Автор Тема: CANVAS не построява винаги елементите  (Прочетена 1565 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: CANVAS не построява винаги елементите
« Отговор #15 -: 26 Октомври 2014, 13:44:09 »
E като си разбрал що не го сподели. Хубаво е и ние да знаем, защо html5 е недоносче.  :)

HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 123
  • -Получени: 73
  • Публикации: 1002
  • Кибик
Re: CANVAS не построява винаги елементите
« Отговор #16 -: 26 Октомври 2014, 14:01:04 »
Споделям: не работи.
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: CANVAS не построява винаги елементите
« Отговор #17 -: 26 Октомври 2014, 17:32:23 »
Нещо със SVG няма ли да стане?
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 123
  • -Получени: 73
  • Публикации: 1002
  • Кибик
Re: CANVAS не построява винаги елементите
« Отговор #18 -: 26 Октомври 2014, 17:36:39 »
Аз го направих с PHP там поне не трябва да се съобразявам с браузери.
Пренаписах един клас и реших проблема:
Код: PHP
  1. <?php
  2.  
  3. /**
  4.  * Captcha
  5.  */
  6.  
  7. namespace Here;
  8.  
  9. class Captcha extends \Here\Lib {
  10.  
  11.     private $font = null;
  12.    
  13.     public function __construct() {
  14.         $dir = __DIR__ . '/captcha/';
  15.         $font = $this->scandir($dir);
  16.         $this->font = $dir . $font[\rand(0, \count($font)-1)];
  17.     }
  18.  
  19.     private function generateCode($characters) {
  20.         /* Възможните символи */
  21.         //$possible = '23456789bcdfghjkmnpqrstvwxyz';
  22.         $possible = '23456789BCDFGHJKMNPRSTVWXYZ';
  23.         $code = '';
  24.         $i = 0;
  25.         while ($i < $characters) {
  26.             $code .= substr($possible, mt_rand(0, strlen($possible) - 1), 1);
  27.             $i++;
  28.         }
  29.         return $code;
  30.     }
  31.  
  32.     function getImage($width = '200', $height = '40', $characters = '6') {
  33.         $code = $this->generateCode($characters);
  34.         /*Шрифта е 75% от височината на изображението */
  35.         $font_size = $height * 0.75;
  36.         $image = imagecreate($width, $height) or die('Cannot initialize new GD image stream');
  37.         /* Настройка на цветовете */
  38.         $background_color = imagecolorallocate($image, 255, 255, 255);
  39.         $text_color = imagecolorallocate($image, 100, 150, 150);
  40.         $noise_color = imagecolorallocate($image, 0, 255, 0);
  41.         /* Генерира случайни точки за фон */
  42.         for ($i = 0; $i < ($width * $height) / 3; $i++) {
  43.             imagefilledellipse($image, mt_rand(0, $width), mt_rand(0, $height), 1, 1, $noise_color);
  44.         }
  45.         /* Генерира случайни щрихи за фон */
  46.         for ($i = 0; $i < ($width * $height) / 150; $i++) {
  47.             imageline($image, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $noise_color);
  48.         }
  49.         /* Създаване на текстова кутия и добавяне на текст */
  50.         $textbox = imagettfbbox($font_size, 0, $this->font, $code) or die('Error in imagettfbbox function');
  51.         $x = ($width - $textbox[4]) / 2;
  52.         $y = ($height - $textbox[5]) / 2;
  53.         imagettftext($image, $font_size, 0, $x, $y, $text_color, $this->font, $code) or die('Error in imagettftext function');
  54.         /* Изход в браузера */
  55.         header('Content-Type: image/jpeg');
  56.         imagejpeg($image);
  57.         imagedestroy($image);
  58.         $this->getSession()->captcha = \strtoupper($code);
  59.     }
  60.  
  61.     /**
  62.      *
  63.      * @return \Here\Captcha
  64.      */
  65.     public static function getInstance() {
  66.         return new \Here\Captcha();
  67.     }
  68.  
  69. }
  70.  
Код: PHP
  1. $captcha = new \Here\Captcha();
  2. $captcha->getImage();
  3. // или
  4. \Here\Captcha::getInstace()->getImage('150',  '30',  '4');
...при мен в контролера Register.php имам метода:
Код: PHP
  1. public function captchaImage() {
  2.         $cap = new \Here\Captcha();
  3.         return $cap->getImage();
  4.     }
и го достъпвам така:
Код: HTML
  1. <img alt="captca" src="http://imoti.eu/register/capthaimage/">
« Последна редакция: 26 Октомври 2014, 18:12:50 от HanKrum »
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой