简体   繁体   English

如何使用 GD 拉伸 PHP 中的文本?

[英]How to stretch text in PHP using GD?

Is it possible to stretch text using GD in PHP?是否可以在 PHP 中使用 GD 拉伸文本? I need it for captcha, like in this picture (right captcha).我需要它用于验证码,就像这张图片(右验证码)一样。

Here is a sample taken from here , there are bunch of options to create a captcha per your needs.这是从此处获取的示例,有很多选项可以根据您的需要创建验证码。

captcha-image.php验证码图像.php

<?php

    session_start();
    //PHP CAPTCHA image
    //Generated by https://www.html-code-generator.com/php/captcha-image-code-generator


    $width = 130;
    $height = 30;
    $font_size = 20;
    $font = "./verdana.ttf";
    $font = realpath($font);
    $chars_length = 4;

    $captcha_characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    $image = imagecreatetruecolor($width, $height);
    $bg_color = imagecolorallocate($image, 255, 0, 0);
    $font_color = imagecolorallocate($image, 255, 255, 255);
    imagefilledrectangle($image, 0, 0, $width, $height, $bg_color);

    //background random-line
    $vert_line = round($width/5);
    $color = imagecolorallocate($image, 255, 255, 255);
    for($i=0; $i < $vert_line; $i++) {
        imageline($image, rand(0,$width), rand(0,$height), rand(0,$height), rand(0,$width), $color);
    }

    $xw = ($width/$chars_length);
    $x = 0;
    $font_gap = $xw/2-$font_size/2;
    $digit = '';
    for($i = 0; $i < $chars_length; $i++) {
        $letter = $captcha_characters[rand(0, strlen($captcha_characters)-1)];
        $digit .= $letter;
        if ($i == 0) {
            $x = 0;
        }else {
            $x = $xw*$i;
        }
        imagettftext($image, $font_size, rand(-20,20), $x+$font_gap, rand(22, $height-5), $font_color, $font, $letter);
    }

    // record token in session variable
    $_SESSION['captcha_token'] = strtolower($digit);

    // display image
    header('Content-Type: image/png');
    imagepng($image);
    imagedestroy($image);
?>

index.html索引.html

<!DOCTYPE html>
<html>
<head>
    <title>PHP CAPTCHA Test Form</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>

    <div class="p-5">

        <div class="card">
            <div class="card-header">Message</div>
            <div class="card-body">

                <form id="contact-form" method="post" action="contact.php">
                    <div class="form-group row align-items-center">
                        <label for="message" class="col-sm-2 col-form-label">Message *</label>
                        <div class="col-sm-10">
                            <textarea class="form-control" rows="2" name="message" id="message"></textarea>
                        </div>
                    </div>

                    <div class="form-group row">
                        <label class="col-sm-2 col-form-label">Captcha *</label>
                        <div class="col-sm-10">
                            <div class="form-row align-items-center">
                                <div class="col mb-3">
                                    <input type="text" class="form-control" name="token" id="token" placeholder="Captcha" style="min-width: 150px;">
                                </div>

                                <div class="col mb-3">
                                    <img src="./captcha/image.php?12325" alt="CAPTCHA" id="image-captcha">
                                    <a href="#" id="refresh-captcha" class="align-middle" title="refresh"><i class="material-icons align-middle">refresh</i></a>
                                </div>

                            </div>

                        </div>
                    </div>

                    <button type="submit" class="btn btn-primary" name="submit" id="submit">submit</button>
                </form>

            </div>
        </div>

    </div>

    <script>
        var refreshButton = document.getElementById("refresh-captcha");
        var captchaImage = document.getElementById("image-captcha");

        refreshButton.onclick = function(event) {
            event.preventDefault();
            captchaImage.src = './captcha/image.php?' + Date.now();
        };
    </script>

</body>
</html>

contact.php联系方式。php

<?php 

    session_start();

    if ( isset($_POST['message'], $_POST['token']) ) {

        
        $token = strtolower($_POST['token']);

        // validate captcha code        
        if (isset($_SESSION['captcha_token']) && $_SESSION['captcha_token'] == $token) {

            //success your code here

            $to = "somebody@example.com";
            $subject = "subject";
            $message = $_POST['message'];
            $headers = "From: webmaster@example.com" . "\r\n" .  "CC: somebodyelse@example.com";
            
            //mail($to, $subject, $message, $headers);

            echo "success";

        } else {
            echo "error CAPTCHA code";
        }
        
    }
?>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM