Isolution666
@Isolution666
Full-Stack Developer

Captcha Yii2, как вставить картинку в капчу?

Здравствуйте.
--
Вопрос: вот кусок контроллера

public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            'captcha' => [
                'foreColor' => 0xff3366,
                'fontFile' => '@yii/captcha/dancingscript-regular.ttf',
                'transparent' => true,
                'maxLength' => 8,
                'width' => 230,
                'height' => 80,
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }


Вот результат:
59f4b86d70878973798188.png
Если присмотреться, я там намалевал красным и синим.
Вопрос: Вы прекрасно знаете, что если скачать капчу на комп, это будет картинка в png. Так вот, нужно сделать фирменную капчу. Чтобы на картинке был логотип компании, как это делал Яндекс со своими капчами. Дело в том, что я убрал задний фон - он прозрачный, Но надо чтобы на этом фоне был логитип. Можно ли как то внедрить background, не сплошной цвет фона, а картинку, кто заморачивался? делал, может шумы наносил или ещё что-то. Благодарю заранее за понимание и отзывчивость.
  • Вопрос задан
  • 518 просмотров
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
Если взять за пример capcha.ru, то в этой капче есть параметр $credits, который выводит внизу картинки строку, по умолчанию 'www.captcha.ru'
В файле kcaptcha.php есть такая строка
imagestring($img2, 2, $width/2-imagefontwidth(2)*strlen($credits)/2, $height-2, $credits, $background);

При помощи этой строки выводится надпись на капче.
Вот по этому примеру, я думаю, можно сделать наложение Вашего логотипа на капчу.

p.s.
Вот фрагмент файла kcaptcha.php
$img2=imagecreatetruecolor($width, $height+($show_credits?12:0));
		$foreground=imagecolorallocate($img2, $foreground_color[0], $foreground_color[1], $foreground_color[2]);
		$background=imagecolorallocate($img2, $background_color[0], $background_color[1], $background_color[2]);
		imagefilledrectangle($img2, 0, 0, $width-1, $height-1, $background);		
		imagefilledrectangle($img2, 0, $height, $width-1, $height+12, $foreground);
		$credits=empty($credits)?$_SERVER['HTTP_HOST']:$credits;
		imagestring($img2, 2, $width/2-imagefontwidth(2)*strlen($credits)/2, $height-2, $credits, $background);
Ответ написан
@BorisKorobkov
Web developer
Если изменить стили - это делается параметрами.

Если добавить надпись:
  1. extends https://github.com/yiisoft/yii2/blob/master/framew...
  2. дописать свой метод renderImage с блэкджеком и шлюхами,
  3. в вашем контроллере в методе actions() указать ссылку на ваш CaptchaAction
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы