【问题标题】:Capctha creation code in PHP not working [closed]PHP中的验证码创建者代码不起作用[关闭]
【发布时间】:2014-05-09 18:55:10
【问题描述】:

我正在尝试在 php 中制作验证码。这是我的代码:

$amountChars = 5;
$randString = substr(md5(uniqid()), 0, $amountChars);
$img = imagecreatfromjpeg("noise.jpg");
imageantialias($img, true);

$x = 20;
$y = 35;
$deltaX = 40;

for($i = 0; $i < $amountChars; $i++){
    $size = rand(18, 28);
    $r = rand(0,152);
    $g = rand(0,152);
    $b = rand(0,152);
    $color = imagecolorallocate($img, $r, $g, $b);
    $angle = -30 + rand(0, 60);
    imagettftext($img, $size, $angle, $x, $y, $color, "Blokletters-Balpen.ttf", $randString{$i});
    $x += $deltaX;
}

header("Content-Type: image/png");
imagePNG($img);

问题是,它不起作用。我搜索了一个多小时的错误,但没有成功。

【问题讨论】:

  • 请解释什么不起作用。 (以及第纳尔是多少)
  • 图片需要在自己的页面上渲染。
  • 为什么要混合 PNG 和 JPEG? (imagecreatefromjpeg, and later imagePNG) 你确定允许吗?如果没有,您是否尝试过将基本图像转换为 PNG 并使用 imagecreatefrompng ?
  • Placeholders_in_use 我有... nl-x 图片不显示。跨度>
  • image_capcha.php 是否甚至将输出呈现到文件中?那是你应该首先尝试的。如果可行,则再次检查 PHP 代码以查看如何将其直接呈现为图像 SRC 标记。

标签: php captcha


【解决方案1】:

再试一次,因为我因为没有给出真正的答案而被激怒...逐步浏览您的代码,我能够通过以下修改使其运行:

$amountChars = 5;
$randString = substr(md5(uniqid()), 0, $amountChars);
// TYPO: MISSING E
$img = imagecreatefromjpeg("noise.jpg");

// IT'S POSSIBLE THIS FUNCTION ISN'T DEFINED:
// SEE REFERENCE LINK BELOW CODE
// imageantialias($img, true);

$x = 20;
$y = 35;
$deltaX = 40;

for($i = 0; $i < $amountChars; $i++) {
    $size = rand(18, 28);
    $r = rand(0,152);
    $g = rand(0,152);
    $b = rand(0,152);
    $color = imagecolorallocate($img, $r, $g, $b);
    $angle = -30 + rand(0, 60);
    // ADDED ./ TO FONT PATH, CHANGED $randString{$i} TO $randString[$i]
    imagettftext($img, $size, $angle, $x, $y, $color, "./Blokletters-Balpen.ttf", $randString[$i]);
    // WHY IS THIS HERE?
    $x += $deltaX;
}
header("Content-Type: image/png");
imagePNG($img);

imageantialias 函数 doesn't appear to be available on all systems。我的上没有它,所以我只是将其注释掉。

这些更改至少应该让您的代码正常工作。如果您正在寻找更深入的示例,我建议您查看this tutorial

【讨论】:

  • 您不应添加新答案,而应使用此编辑您的原始答案。
  • 我发表评论的时候它还在。道歉。
【解决方案2】:

我获取了您的代码,创建了一个 noise.jpg 图像,甚至从这里下载了 Blokletters-Balpen.ttf 以查看发生了什么。快速查看您的代码会发现一个错字:

$img = imagecreatfromjpeg("noise.jpg");

不应该是imagecreatefromjpeg吗?请注意原始代码中缺少的e

$img = imagecreatefromjpeg("noise.jpg");

我想它现在应该可以工作了吧?除非您在将其放在 &lt;img src="image_capcha.php" /&gt; 时遇到问题?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2013-06-02
    • 2017-08-05
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多