我正在尝试使用php-image-magician显示上传的图像以及不同大小的文本水印而不保存图像。
以下是代码:
<?php
$errors = array();
function mimeValidator($imagefile)
{
$imageInfo = getimagesize($imagefile);
$allowedMimes = array('image/jpg', 'image/jpeg', 'image/png');
if(!in_array($imageInfo['mime'], $allowedMimes))
$errors[] = "Only jpg and png images are supported";
}
function renderImage($imageSource, $watermark, $fontSize, $font)
{
$imageInfo = getimagesize($imageSource);
list($width,$height) = getimagesize($imageSource);
if($imageInfo['mime'] == 'image/jpg' || $imageInfo['mime'] == 'image/jpeg')
$imageSource = imagecreatefromjpeg($imageSource);
elseif($imageInfo['mime'] == 'image/png')
$imageSource = imagecreatefrompng($imageSource);
$image = imagecreatetruecolor($width, $height);
$blue = imagecolorallocate($image, 79, 166, 185);
$text = imagettftext($imageSource, $fontSize, 0, 20, ($height-20), $blue, $font, $watermark);
ob_start();
imagejpeg($imageSource);
$image = ob_get_contents();
ob_end_clean();
return base64_encode($image);
}
?><html>
<head>
<title>
image Watermark and resize
</title>
<style type="text/css">
body{ width:800px; margin: 15px auto; padding:0px; font-family: arial}
</style>
</head>
<body>
<form name="imageUpload" id="imageUpload" method="post" enctype="multipart/form-data" >
<fieldset>
<legend>Image text watermark</legend>
Text: <input type="text" name="text" id="text"/><br />
Image: <input type="file" name="image" id="image"/><br />
<input type="submit" name="submit" id="createmark" value="Submit" />
</fieldset>
<?php
if(isset($_POST['submit']))
{
if($_POST['text'] == '')
$errors[] = "Text is too short";
if($_FILES['image']['tmp_name'] == '')
$errors[] = "Please upload a image";
else
mimeValidator($_FILES['image']['tmp_name']);
if(count($errors) == 0)
{
include('php-image-magician/php_image_magician.php');
$magicianObj = new imageLib($_FILES["image"]["tmp_name"]);
$magicianObj -> resizeImage(100, 200);
$magicianObj -> saveImage($imagename);
echo "<img src=\"data:image/gif;base64," . renderImage($_FILES["image"]["tmp_name"], $_POST['text'], 30, "./arial.ttf") . "\" />";
}
else
{
echo "<ul>";
foreach($errors as $error)
echo "<li>{$error}</li>";
echo "</ul>";
}
}
?>
</form>
</body>
</html>
我收到错误“文件C:\ xampp \ tmp \ php9E3D.tmp缺失或无效” 我是新手。请帮帮我。
答案 0 :(得分:1)
我从未使用过php-image-magician,所以以下内容很可能是虚假信息。
从我看到的内容:
$magicianObj = new imageLib($_FILES["image"]["tmp_name"]);
在内部,imageLib
调用openImage
,后者又会执行以下操作:
1)它检查文件是否确实存在
2)它检查扩展并使用正确的imagecreatefrom_ _ _函数。
这是你的问题开始的地方。当您将文件上传到您的网络服务器时,它们会以临时文件名保存(在您的示例中,“php9E3D.tmp”)。此扩展名(.tmp)不在php-image-magician允许的扩展名列表中(.jpg,.jpeg,.gif,.png,.bmp,.psd)。因此,内部image
变量设置为false,整个库将无法工作。
您有几种方法可以解决此问题:
1)重写php-image-magician(特别是openImage
),但不建议这样做。
2)使用move_uploaded_file
重命名您上传的文件,参见示例#2 here。
3)摆脱对php-image-magician的依赖,并使用PHP内部函数(imagescale
和朋友,你已经创建了一个在renderImage函数中使用的图像资源)
希望这有帮助。