0

キャプチャを生成するために、php で次のコードを記述しました。コードは https:// で実行され、IE9、Mozilla、Chrome、および Safari で問題なく動作します。ただし、IE8では、動作する場合と動作しない場合があります(壊れた画像を示しています)。誰が何が起こっているのか知っていますか?以下のコードで IE8 で問題が発生する可能性があります。

     class Captcha_generator{

        function __construct()
        {

        }

        public function get_image($callType)
        {
            $font = './image/MONOFONT.TTF';
            $width='140';
            $height='40';
            $font_size = $height * 0.75;
            $angle = 3; 

            //Now lets use md5 to generate a totally random string 
            $md5 = md5(microtime() * mktime()); 

            /* 
            We dont need a 32 character long string so we trim it down to 5 
            */ 
            $string = substr($md5,0,5);
            /* 
            Now for the GD stuff, for ease of use lets create 
            the image from a background image. 
            */ 


            $captcha = imagecreate($width, $height);
rand(0,255));


            /* 
            Lets set the colours, the colour $line is used to generate lines. 
            Using a blue misty colours. The colour codes are in RGB 
            */ 

            $background_color = imagecolorallocate($captcha, 255, 255, 255);
            $text_color = imagecolorallocate($captcha, 20, 40, 100);
            $noise_color = imagecolorallocate($captcha, 100, 120, 180);

            /* generate random dots in background */
            for( $i=0; $i<($width*$height)/3; $i++ ) {
             imagefilledellipse($captcha, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
            }
            /* generate random lines in background */
            for( $i=0; $i<($width*$height)/150; $i++ ) {
             imageline($captcha, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
            }



            /* 
            Encrypt and store the key inside of a session 
            */ 

            $_SESSION['captcha_key'] = md5("SDFSDTRSDERGTGGT".$string."AAAAA"); 

            /* 
            Output the image 
            */ 

            imagettftext($captcha, $font_size, $angle, 30, 30, $text_color, $font , $string);
            imagepng($captcha, './image/captcha.png');


            if($callType == "internal")
            {
                return "<img style='z-index:90' width='130' height='35' src='image/captcha.png?".time()."' />; 
                        <input type='hidden' name='powerCode' value='".$_SESSION['captcha_key']."'/>";
            }
            else 
            {
                echo "<img style='z-index:90' width='130' height='35' src='image/captcha.png?".time()."' />";
                echo "<input type='hidden' name='powerCode' value='".$_SESSION['captcha_key']."'/>";
            }
        }


     }
4

1 に答える 1

1

これは回答というよりはコメントであり、キャプチャ PNG 画像をデータ uri に変換する方法のみを示しています。

        /* 
        Output the image 
        */ 

        imagettftext($captcha, $font_size, $angle, 30, 30, $text_color, $font , $string);
        ob_start();
        imagepng($captcha);
        $captchaURI= 'data:image/png;base64,'.base64_encode(ob_get_clean());

ここで出力制御関数の使用法に注意してください。多くの場合、非常に便利です。たとえば、コードを複製せずに関数をエコーさせたり、文字列を返したりすることができます。

        ob_start();
        echo "<img style='z-index:90' width='130' height='35' src='", $captchaURI, "' />";
        echo "<input type='hidden' name='powerCode' value='", $_SESSION['captcha_key'], "'/>";
        if ($callType == "internal")
        {
             return ob_get_clean();
        }
        ob_end_flush();
于 2012-06-27T23:33:21.003 に答える