我不确定问题是什么,在我将文件移动到新目录之前它工作正常现在它似乎不想加载/创建图像。
<?php
session_start();
header('Content-type: image/png');
$text = $_SESSION['secure'];
$image = new Imagick();
$draw = new ImagickDraw();
$color = new ImagickPixel('#444444');
$image->newImage(320, 40, new ImagickPixel('#0d0d0d'));
$image->setImageFormat('png');
$draw->setFont("fonts/UbuntuMono-B.ttf");
$draw->setFontSize(30);
$draw->setFillColor($color);
$image->annotateImage($draw, 100, 30, 0, $text);
$image->sketchImage (1, 10, 0);
echo $image;
?>
答案 0 :(得分:1)
不完全确定Imagick的工作原理,但您确定在移动目录的目录中拥有相应的文件权限吗?
你确定你没有改变什么吗?
最后,如果你把它放回去,它仍能正常工作吗?
(我会回复你的问题,但我没有必要的声誉)
答案 1 :(得分:0)
您可以在文件顶部添加以下内容来检查错误:
ini_set('display_errors',1);
error_reporting(E_ALL);
或从命令行:
php -l filepath.php
将文件夹的所有者设置为apache(如果您使用的是apache)可以解决您的问题,如果它是权限。
chown apache:apache filepath.php
答案 2 :(得分:0)
我们需要生成一个随机字符串(文本),将其存储在会话中以检查$ _POST,使用该字符串创建图像,在表单上显示图像,然后在提交时进行检查。
步骤1.创建一个随机字符串并将其保存在$ _SESSION中 这一步非常容易,因为PHP具有我们所需的所有功能。生成随机字符串的一种快速有效的方法是使用rand函数,将其md5加密,然后仅提取所需数量的字符。
代码:
getResponseForItem(item)
将以上内容保存到“ captcha.php”,然后查看其生成的内容。 资源:http://www.php.net/md5,http://www.php.net/rand,http://www.php.net/substr,http://www.php.net/uniqid
步骤2。根据生成的字符串创建图像 有很多不同的方法可以做到这一点,例如使用GD库(gd库),但是我更喜欢使用ImageMagick进行图像处理-个人选择。
请注意:ImageMagick和GD Lib默认情况下不随PHP一起提供,请检查它们是否已安装在您的服务器上。
首先,我们需要背景图像(附加到此线程-请将其存储在images /文件夹中)-每次生成图像时,都会随机选择“ bg1.png”,“ bg2.png”和“ bg3.png”背景图片。我们将文件名存储在易于访问的数组中。使用ImageMagick时,您应该上传所需的字体以使用,这意味着它将在其他服务器上始终能够使用您的字体。
所以我们现在有以下代码。 代码:
<?php
session_start(); // Very important.
$captcha = md5(uniqid(rand(), true)); // Generate our random string.
$captcha = substr($captcha,0,6);
$_SESSION['captchaCode'] = $captcha; // Save the captch code to a session.
echo $captcha; // echo a generated code for testing purposes
?>
现在是最复杂的部分,实际上是将它们放在一起-但请放心,我会尽一切可能评论所有事情。
代码:
<?php
session_start(); // Very important.
$captcha = md5(uniqid(rand(), true)); // Generate our random string.
$captcha = substr($captcha,0,6);
$_SESSION['captchaCode'] = $captcha; // Save the captch code to a session.
//echo $captcha; // echo a generated code for testing purposes
$imageDirectory = 'images/'; // The relative or absolute path to where images are stored.
$bgImages = array('bg1.png', 'bg2.png', 'bg3.png');
$backgroundImage = $imageDirectory.$bgImages[rand(0, count($bgImages)-1)]; // This chooses an image.
?>
运行上面的代码时,您应该看到类似以下内容: 图片
第3步。在表单中使用验证码。 好了,困难的部分已经过去了!从这里开始变得更加简单!
我们所需要做的就是将验证码脚本加载到img标签中,例如
这是表单页面。 代码:
<?php
session_start(); // Very important.
$captcha = md5(uniqid(rand(), true)); // Generate our random string.
$captcha = substr($captcha,0,6);
$_SESSION['captchaCode'] = $captcha; // Save the captch code to a session.
//echo $captcha; // echo a generated code for testing purposes
$imageDirectory = 'images/'; // The relative or absolute path to where images are stored.
$bgImages = array('bg1.png', 'bg2.png', 'bg3.png');
$backgroundImage = $imageDirectory.$bgImages[rand(0, count($bgImages)-1)]; // This chooses an image.
$tmpFilename = $captcha . '.png'; // Use the captcha code to create a random filename - Please note this filename is not shown in the user's web browser.
$imageTmpDirectory = 'images/tmp/'; //Directory to store all tmp generated images.
$font = 'arial.ttf'; // The chosen font - this font sits in the same folder as this script.
$FontSize = rand(24, 36); // Random select a font size between 24 and 36.
$hexValues = array('0','1','2','3','4'); // Hex values, we always want dark colours hence 0 to 5.
$numHex = count($hexValues); // Count how many hex values.
$GeneratedHex = ''; // Set the variable.
for ($i = 0; $i < 6; $i++) {
$GeneratedHex .= $hexValues[rand(0, $numHex-1)]; // Generate the end hex colour.
}
$gravities = array('West', 'Center', 'East'); // ImageMagicks gravity function.
$gravity = $gravities[rand(0, count($gravities)-1)]; // Choose a gravity.
$angle = rand(-5, 5); // Generate an angle for the text.
$cmd = '/usr/bin/convert'; // Path to ImageMagick on the server.
$cmd .= ' -font '.$font; // The generated colour.
$cmd .= ' -fill "#'.$GeneratedHex.'"'; // The generated colour.
$cmd .= ' -pointsize '.$FontSize ; // The size.
$cmd .= ' -gravity "'.$gravity.'"'; // Select generated gravity.
$cmd .= ' -draw \'text 0,0 "'.$captcha.'"\''; // Draw the captcha.
$cmd .= ' -rotate '.$angle; // Rotate the text to the generated angle.
$cmd .= ' ./'.$backgroundImage.' ./'.$imageTmpDirectory.$tmpFilename; // Assign background image and then save output.
exec($cmd); // Run the command!
header('Content-Type: image/png');
print fread(fopen($imageTmpDirectory.$tmpFilename, 'r'), filesize($imageTmpDirectory.$tmpFilename));
unlink($imageTmpDirectory.$tmpFilename); // Delete the tmp image.
?>
这是提交页面(capturePost.php) 代码:
<?php
session_start(); // Very important to be the first statement. ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form action="capturePost.php" method="post">
<?php
if(!empty($_SESSION['ERROR'])) { // We have an error from capturePost.php
echo '<p>' . $_SESSION['ERROR'] . '</p>'; // Display error.
unset($_SESSION['ERROR']); // Clear error.
}?>
<img src="captcha.php" alt="Captcha Code"><br />
Please enter the security code <input type="text" name="captcha">
<br /><input type="submit">
</form>
</body>
</html>
我真的希望这会有所帮助。