ManaPHP\Security\Captcha::_generateByImagic PHP Метод

_generateByImagic() защищенный Метод

protected _generateByImagic ( string $code, integer $width, integer $height ) : ManaPHP\Http\ResponseInterface
$code string
$width integer
$height integer
Результат ManaPHP\Http\ResponseInterface
    protected function _generateByImagic($code, $width, $height)
    {
        $image = new \Imagick();
        $draw = new \ImagickDraw();
        $image->newImage($width, $height, new \ImagickPixel('rgb(' . $this->_bgRGB . ')'));
        $draw->setFont($this->alias->resolve($this->_fonts[(int) (mt_rand() % count($this->_fonts))]));
        $draw->setGravity(\Imagick::GRAVITY_NORTHWEST);
        $referenceFontSize = min($height, $width / $this->_length);
        $x = mt_rand($referenceFontSize * 0.1, $referenceFontSize * 0.3);
        $length = strlen($code);
        $fgPixel = new \ImagickPixel();
        /** @noinspection ForeachInvariantsInspection */
        for ($i = 0; $i < $length; $i++) {
            $fontSize = $referenceFontSize * mt_rand(800, 1000) / 1000;
            $draw->setFontSize($fontSize);
            $fgPixel->setColor('rgb(' . mt_rand(0, 240) . ',' . mt_rand(0, 240) . ',' . mt_rand(0, 240) . ')');
            $draw->setFillColor($fgPixel);
            $angle = mt_rand(-$this->_angleAmplitude, $this->_angleAmplitude);
            $y = ($height - $referenceFontSize) * mt_rand(-1000, 1000) / 1000;
            $image->annotateImage($draw, $x, $y, $angle, $code[$i]);
            $x += $fontSize * mt_rand(600, 800) / 1000;
            for ($k = 0; $k < $this->_noiseCharCount; $k++) {
                $letter = $this->_charset[(int) (mt_rand() % strlen($this->_charset))];
                $fgPixel->setColor('rgb(' . mt_rand(0, 240) . ',' . mt_rand(0, 240) . ',' . mt_rand(0, 240) . ')');
                $draw->setFillColor($fgPixel);
                $draw->setFontSize($fontSize * 0.4 * $this->_rand_amplitude(0.1));
                $angle = mt_rand(-40, 40);
                $image->annotateImage($draw, $x + mt_rand(-700, 700) / 1000 * $fontSize, $fontSize / 2 + mt_rand(-$fontSize * 0.5, $fontSize * 0.5), $angle, $letter);
            }
        }
        $this->response->setContentType('image/jpeg');
        $image->setImageFormat('jpeg');
        $this->response->setContent((string) $image);
        $image->destroy();
        $fgPixel->destroy();
        $draw->destroy();
        return $this->response;
    }